SQL

SQL

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

페이지 정보

profile_image
영삼이
0건 47회 25-03-28 15:23

본문

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을 써야 한다.
두 절의 차이를 명확히 구분하면 복잡한 집계도 정확하게 처리할 수 있다.

댓글목록

등록된 댓글이 없습니다.