HAVING은 집계 이후 필터링이다 — WHERE와 역할이 다르다
페이지 정보

영삼이
본문
✅ HAVING
은 집계 이후 필터링이다 — WHERE와 역할이 다르다
집계 전 필터는 WHERE, 집계 후 필터는 HAVING
❌ 헷갈리는 예시
SELECT user_id, COUNT(*) AS order_count
FROM orders
WHERE order_count > 5 -- ❌ 오류 발생
GROUP BY user_id;
-
WHERE
에서는COUNT(*)
같은 집계함수를 사용할 수 없음 -
집계 이전 단계에서 필터링하기 때문
✅ 올바른 사용: 집계 후 필터는 HAVING
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5;
-
GROUP BY
로 그룹을 만들고 -
그 결과를 기반으로 조건 필터링
추가 예시: 조건 조합도 가능
SELECT user_id, SUM(amount) AS total
FROM orders
WHERE status = 'paid'
GROUP BY user_id
HAVING SUM(amount) > 100000;
-
WHERE
: 집계 전 조건 (예: status = 'paid') -
HAVING
: 집계 후 조건 (예: 합계가 10만 원 이상)
✔️ WHERE
은 로우 필터, HAVING
은 그룹 필터
집계 함수가 들어가면 무조건 HAVING을 써야 한다.
두 절의 차이를 명확히 구분하면 복잡한 집계도 정확하게 처리할 수 있다.
- 이전글JOIN을 사용할 때는 필요 없는 컬럼까지 조인하지 말라 25.03.28
- 다음글조건마다 다른 집계를 원할 때는 SUM(CASE WHEN ...)이 정답이다 25.03.28
댓글목록
등록된 댓글이 없습니다.