집계 함수를 조건에 넣었더니 쿼리가 실행되지 않았던 적 있으신가요?
그럴 땐 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 절에 적어야 정상적으로 실행됩니다.
SELECT user_id
, COUNT(*) AS purchase_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 3;
→ 유저별로 구매 횟수를 집계한 뒤, 그중 3회 이상 구매한 유저만 필터링합니다.
✔️ WHERE는 개별 행을 필터링할 때, HAVING은 집계 결과를 필터링할 때 사용해야 합니다.
✔️ 집계 함수와 조건을 함께 쓰려면 반드시 HAVING을 사용하세요.