다음 SQL의 실행 결과로 옳은 것은?[상영]상영번호상영관관객수1IMA… | [SQLD] SQL 개발자 기출유형 모의고사 9회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 9회
다음 SQL의 실행 결과로 옳은 것은?[상영]
| 상영번호 | 상영관 | 관객수 |
|---|---|---|
| 1 | IMAX | 120 |
| 2 | IMAX | (null) |
| 3 | 2D | 90 |
| 4 | IMAX | 200 |
| 5 | (null) | 150 |
| 6 | 2D | (null) |
SELECT COUNT(*) AS 회차,
COUNT(관객수) AS 집계,
SUM(관객수) AS 합계
FROM 상영
WHERE 상영관 = 'IMAX'
HAVING SUM(관객수) > 300;1
| 회차 | 집계 | 합계 |
|---|---|---|
| 3 | 2 | 320 |
2
| 회차 | 집계 | 합계 |
|---|---|---|
| 3 | 3 | 320 |
3
| 회차 | 집계 | 합계 |
|---|
4
| 회차 | 집계 | 합계 |
|---|---|---|
| 2 | 2 | 320 |
해설
WHERE 로 IMAX 세 행(120·NULL·200)만 남고, GROUP BY 가 없으므로 이 세 행 전체가 하나의 그룹이 되어 HAVING 합계 320 > 300 이 참이라 1행이 나온다.
COUNT(*)는 NULL 행도 세어 3, COUNT(관객수)는 NULL 을 빼 2이며 SELECT 에는 집계 함수만 있어 그룹 키 없이도 실행된다.
- COUNT(관객수)는 NULL 을 세지 않으므로 3이 아니다.
- COUNT(*)는 관객수가 NULL 인 행도 포함하므로 2가 아니다.
- HAVING 은 GROUP BY 없이도 전체를 한 그룹으로 보고 평가하므로 0행이 아니다.
오류나 개정된 내용이 보이면 알려주세요