문제
다음 중 아래 <학생> 테이블에 대한 SQL문의 실행 결과로 옳은 것은?
| 학번 | 전공 | 학년 | 나이 |
|---|---|---|---|
| 1002 | 영문 | SO | 19 |
| 1004 | 통계 | SN | 23 |
| 1005 | 영문 | SN | 21 |
| 1008 | 수학 | JR | 18 |
| 1009 | 영문 | FR | 18 |
| 1010 | 통계 | SN | 25 |
① 21 ② 22 ③ 23 ④ 24
정답
4번
해설
정답: 4. 먼저 WHERE로 학년='SN'인 행만 추린다: 통계(23), 영문(21), 통계(25). 전공별 그룹화 후 HAVING COUNT(*)>=2를 적용하면 통계 그룹(2명)만 남는다. 통계 그룹의 나이 평균 = (23+25)/2 = 24.
오답 풀이
- 1번: 영문 그룹은 SN 학생이 1명이라 HAVING COUNT>=2를 만족하지 못해 제외된다.
- 2번: 22는 어느 그룹의 평균과도 일치하지 않는다.
- 3번: 23은 통계 학생 한 명의 나이일 뿐 그룹 평균이 아니다.
- 4번: 통계 그룹 평균 (23+25)/2=24이므로 옳다.
보충 개념 WHERE는 그룹화 전 행을 필터링하고, HAVING은 그룹화 후 집계 결과를 필터링한다. 집계 함수 조건은 HAVING에 작성한다.