다음 SQL의 실행 결과로 옳은 것은?[강좌]강좌번호강사번호수강료1T1… | [SQLD] SQL 개발자 기출유형 모의고사 7회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 7회
다음 SQL의 실행 결과로 옳은 것은?[강좌]
| 강좌번호 | 강사번호 | 수강료 |
|---|---|---|
| 1 | T1 | 120 |
| 2 | T1 | 80 |
| 3 | T1 | 100 |
| 4 | T2 | 150 |
| 5 | T2 | 90 |
| 6 | T3 | 110 |
| 7 | T3 | 130 |
| 8 | T3 | (null) |
SELECT 강사번호, COUNT(*) AS 강좌수, SUM(수강료) AS 합계 FROM 강좌 WHERE 수강료 >= 100 GROUP BY 강사번호 HAVING COUNT(*) >= 2 ORDER BY 강사번호;
1
| 강사번호 | 강좌수 | 합계 |
|---|---|---|
| T1 | 2 | 220 |
| T2 | 1 | 150 |
| T3 | 2 | 240 |
2
| 강사번호 | 강좌수 | 합계 |
|---|---|---|
| T1 | 3 | 300 |
| T2 | 2 | 240 |
| T3 | 3 | 240 |
3
| 강사번호 | 강좌수 | 합계 |
|---|---|---|
| T1 | 2 | 220 |
| T3 | 3 | 240 |
4
| 강사번호 | 강좌수 | 합계 |
|---|---|---|
| T1 | 2 | 220 |
| T3 | 2 | 240 |
해설
WHERE 가 그룹화 전에 수강료 100 이상 행만 남기므로 T1 은 120·100, T2 는 150, T3 는 110·130 만 집계되고(NULL 은 비교가 UNKNOWN 이라 제외) 이어서 HAVING 이 2건 이상인 그룹만 남긴다.
그래서 1건뿐인 T2 가 빠지고 T1(2건, 220)과 T3(2건, 240) 두 행이 나온다.
- HAVING 을 무시하면 1건인 T2 까지 결과에 남는다.
- 수강료가 NULL 인 행은 WHERE 에서 이미 빠져 T3 의 건수는 3 이 아니다.
- WHERE 를 무시하고 전체 행을 세면 건수와 합계가 모두 커진다.
오류나 개정된 내용이 보이면 알려주세요