Filter Timing

WHERE와 HAVING의 위치

WHERE는 그룹을 만들기 전 행을 줄이고, HAVING은 그룹을 만든 뒤 요약 결과를 기준으로 그룹을 거릅니다.

WHERE: 행
GROUP BY
HAVING: 그룹
WHERE

행 필터

stock > 0처럼 개별 행에서 판단할 수 있는 조건을 먼저 적용합니다.

GROUP BY

그룹 생성

남은 행을 category별로 묶고 집계를 계산합니다.

HAVING

그룹 필터

AVG(price) > 50000처럼 집계 결과로 그룹을 남깁니다.

WHERE에 좋은 조건

집계 없이 판단

category = '전자', stock > 0, order_date 범위처럼 행 단위 조건입니다.

HAVING에 필요한 조건

집계 후 판단

COUNT(*) >= 2, SUM(total) > 100만처럼 그룹 요약 값 조건입니다.