WHERE vs HAVING
WHERE는 행을 먼저 줄이고, HAVING은 집계된 그룹을 나중에 줄입니다.
WHERE stock > 0
HAVING AVG(price) > 50000
1. 원본 데이터
products의 개별 상품 행
아직 카테고리별 평균은 계산되지 않은 상태
2. WHERE
재고 없는 행 제거
그룹 계산에 들어갈 입력 행 자체가 달라짐
3. GROUP BY
category별로 평균 계산
이제 개별 행이 아니라 그룹 단위 결과가 생김
4. HAVING
평균 5만 초과 그룹만 남김
집계가 끝난 뒤 최종 출력 그룹을 선택
비교 기준
WHERE
HAVING
적용 시점
GROUP BY 이전 행을 먼저 정리한 뒤 그룹을 만듭니다.
GROUP BY 이후 집계 결과가 나온 다음 그룹을 고릅니다.
필터 대상
개별 상품 행 예: 재고가 0인 상품은 아예 계산에서 빠집니다.
카테고리 그룹 예: 평균 가격이 낮은 카테고리 그룹이 빠집니다.
조건에 쓰는 값
원본 컬럼 값 stock처럼 각 행에 있는 값을 바로 사용
집계 함수 결과 AVG(price)처럼 그룹 계산값을 사용
이 쿼리에서의 효과
평균 계산의 재료를 바꾼다 재고 없는 상품이 빠져 카테고리 평균 자체가 달라질 수 있습니다.
최종 출력 그룹을 바꾼다 평균이 50000을 넘는 카테고리만 결과에 남습니다.
한 줄 정리: 같은 필터처럼 보여도 WHERE는 그룹의 입력을, HAVING은 그룹화의 결과를 바꿉니다.