다음 SQL을 실행한 결과로 옳은 것은?[주문]주문번호지점금액1서울12… | [SQLD] SQL 개발자 기출유형 모의고사 1회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 1회
다음 SQL을 실행한 결과로 옳은 것은?[주문]
| 주문번호 | 지점 | 금액 |
|---|---|---|
| 1 | 서울 | 12000 |
| 2 | 대전 | (null) |
| 3 | 서울 | 8000 |
| 4 | (null) | 5000 |
| 5 | 대전 | 7000 |
SELECT COUNT(*) AS 건수, SUM(금액) AS 합계,
COALESCE(MAX(금액), 0) AS 최대
FROM 주문
WHERE 지점 = '부산';1
| 건수 | 합계 | 최대 |
|---|---|---|
| (null) | (null) | 0 |
2
| 건수 | 합계 | 최대 |
|---|---|---|
| 0 | 0 | 0 |
3
| 건수 | 합계 | 최대 |
|---|
4
| 건수 | 합계 | 최대 |
|---|---|---|
| 0 | (null) | 0 |
해설
GROUP BY 없이 집계 함수만 쓰면 조건에 맞는 행이 없어도 결과는 항상 1행이며, 이때 COUNT(*)는 0, SUM은 NULL이다.
MAX도 NULL이지만 COALESCE가 0으로 바꾸어 최대는 0이 되고, 같은 쿼리에 GROUP BY를 붙이면 만들어질 그룹이 없어 0행이 된다.
- 행이 없는 표는 GROUP BY가 있을 때의 동작이다.
- 합계를 0으로 둔 표는 빈 집합의 SUM을 0으로 착각했다.
- 건수를 NULL로 둔 표는 COUNT가 빈 집합에서 0을 돌려준다는 점을 놓쳤다.
오류나 개정된 내용이 보이면 알려주세요