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만처럼 그룹 요약 값 조건입니다.