[SQL] 집계 조건, WHERE가 아니라 HAVING입니다

Unit·2025년 4월 20일

SQL

목록 보기
7/59

집계 함수를 조건에 넣었더니 쿼리가 실행되지 않았던 적 있으신가요?
그럴 땐 WHERE가 아니라 HAVING을 써야 할 타이밍입니다.


❌ 문제 상황

SELECT user_id
     , COUNT(*) 
FROM orders
WHERE COUNT(*) >= 3
GROUP BY user_id;

이 쿼리는 실행되지 않고 오류가 발생합니다.

📌 PostgreSQL Error 예시

❗ aggregate functions are not allowed in WHERE

WHERE 절은 GROUP BY보다 먼저 실행되기 때문에,
아직 집계 결과인 COUNT(*)는 존재하지 않아 오류가 발생하는 거예요.


✅ 해결 방법: HAVING 사용

집계 조건은 HAVING 절에 적어야 정상적으로 실행됩니다.

SELECT user_id
     , COUNT(*) AS purchase_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 3;

→ 유저별로 구매 횟수를 집계한 뒤, 그중 3회 이상 구매한 유저만 필터링합니다.


정리

✔️ WHERE는 개별 행을 필터링할 때, HAVING은 집계 결과를 필터링할 때 사용해야 합니다.
✔️ 집계 함수와 조건을 함께 쓰려면 반드시 HAVING을 사용하세요.

profile
협업, 유지보수, 최적화를 고려한 데이터 실무 팁을 정리합니다.

0개의 댓글