문제
다음 SQL의 결과가 의미하는 대상으로 옳은 것은?
① 주문 수량의 총합이 10을 초과한 고객 ② 주문 횟수가 10회를 초과한 고객 ③ 모든 주문의 수량이 10을 초과한 고객 ④ 주문 수량이 10을 초과한 주문을 한 번이라도 한 고객
정답
4번
해설
정답은 ④이다. 고객번호로 그룹화한 뒤 HAVING MAX(수량) > 10은 '그 고객의 주문 중 최대 수량이 10을 초과'하는 그룹만 남긴다. 어떤 그룹의 최댓값이 10보다 크다는 것은 그 고객이 수량 10을 넘는 주문을 적어도 한 건 했다는 뜻이므로 ④가 옳다. ① 총합 조건이라면 SUM(수량) > 10이어야 한다. ② 주문 횟수라면 COUNT(*) > 10이어야 한다. ③ '모든 주문이 10 초과'는 최솟값 조건 MIN(수량) > 10이어야 하며 MAX와 다르다. 보충: HAVING은 GROUP BY로 만들어진 그룹에 대한 필터로, 집계함수(MAX/MIN/SUM/COUNT/AVG) 결과를 조건으로 사용한다. 개별 행 필터인 WHERE와 구분해야 한다.