다음 SQL의 실행 결과로 옳은 것은?[상영]상영번호영화번호관객수1M1… | [SQLD] SQL 개발자 기출유형 모의고사 9회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 9회
다음 SQL의 실행 결과로 옳은 것은?[상영]
| 상영번호 | 영화번호 | 관객수 |
|---|---|---|
| 1 | M1 | 80 |
| 2 | M1 | 40 |
| 3 | M1 | 60 |
| 4 | M2 | 30 |
| 5 | M2 | 90 |
| 6 | M3 | (null) |
| 7 | M3 | 70 |
| 8 | M3 | 55 |
| 9 | M4 | 100 |
SELECT 영화번호, COUNT(*) AS 회차, SUM(관객수) AS 관객 FROM 상영 WHERE 관객수 >= 50 GROUP BY 영화번호 HAVING COUNT(*) >= 2 ORDER BY 영화번호;
1
| 영화번호 | 회차 | 관객 |
|---|---|---|
| M1 | 2 | 140 |
| M3 | 3 | 125 |
2
| 영화번호 | 회차 | 관객 |
|---|---|---|
| M1 | 2 | 140 |
| M2 | 1 | 90 |
| M3 | 2 | 125 |
3
| 영화번호 | 회차 | 관객 |
|---|---|---|
| M1 | 3 | 180 |
| M2 | 2 | 120 |
| M3 | 3 | 125 |
4
| 영화번호 | 회차 | 관객 |
|---|---|---|
| M1 | 2 | 140 |
| M3 | 2 | 125 |
해설
WHERE 가 그룹화보다 먼저 실행되어 관객수 50 미만과 NULL 행(2·4·6)이 빠진 뒤 HAVING 이 남은 행 수를 센다.
그 결과 M1(80·60)과 M3(70·55)만 2회가 되어 남고, M2·M4 는 한 행만 남아 HAVING 에서 탈락한다.
- M2 는 WHERE 뒤 90 한 행만 남아 COUNT 가 1이므로 결과에 없다.
- NULL 은 50 이상 비교가 UNKNOWN 이라 M3 의 회차는 3이 아니다.
- WHERE 를 무시하고 모든 행을 센 결과는 실행 순서와 맞지 않는다.
오류나 개정된 내용이 보이면 알려주세요