정처LAB 자체 제작내용 검수 완료2026 SQLD 기초 개념 문제 · SQL 기본 및 활용 · 36번
Oracle에서 고객별 결제 완료 금액을 합산하되, 결제 완료 주문만 그룹화 전에 제외·포함하려 한다. 다음 SQL의 ㉠에 들어갈 절은?
SELECT customer_id, SUM(amount)
FROM orders
㉠
GROUP BY customer_id
HAVING SUM(amount) >= 100000;
1
HAVING status = 'PAID'
오답 이유HAVING은 GROUP BY 뒤에서 집계된 그룹을 거른다. status가 그룹 기준도 집계식도 아니며 개별 행 필터 위치로 부적절하다.
2
WHERE status = 'PAID'
정답 근거WHERE는 GROUP BY 전에 개별 주문 행을 필터링하므로 결제 완료 행만 합계에 포함시킨다.
3
ORDER BY status = 'PAID'
오답 이유ORDER BY는 결과 정렬 절이며 참·거짓 조건으로 행을 제외하지 않는다.
4
ON status = 'PAID'
오답 이유ON은 JOIN의 결합 조건에 사용한다. 현재 FROM에는 단일 테이블만 있고 조인 절이 없다.
정답·상세해설
정답 2번
먼저 PAID 행만 남긴 뒤 고객별로 합산해야 하므로 논리 처리 순서에서 GROUP BY보다 앞선 WHERE가 필요하다. 이후 HAVING은 합계가 100000 이상인 그룹을 다시 거른다.