핵심 전환점: GROUP BY
필터는 두 번 걸리지만,
대상은 같지 않습니다.
먼저
재고 있는 행
만 남기고, 그다음에야 카테고리별 평균을 계산해
조건을 만족하는 그룹
만 고릅니다.
같은 쿼리 안에서 역할 분담
WHERE
집계 전에
개별 행
을 걸러서 입력을 줄입니다.
HAVING
집계 후에
그룹 결과
를 다시 검사합니다.
행 단계
FROM
products
전체를 읽어 평균 계산의 재료가 되는 시작 행 집합을 만듭니다.
6행
전체 상품
행 필터
WHERE
stock > 0
조건으로
재고 없는 행
을 먼저 제거합니다.
5행
집계에 들어갈
행만 남김
대상 전환
GROUP BY
category
기준으로 행을 묶어 이제부터는
그룹 단위
로 평균을 계산합니다.
3그룹
행 → 카테고리별 그룹
그룹 필터
HAVING
AVG(price) > 50000
인 그룹만 통과시켜 최종 결과를 만듭니다.
1그룹
평균 가격 조건
충족
왜 HAVING은 뒤에 오는가?
AVG(price)
는 그룹이 만들어진 뒤에만 계산되므로, 집계 함수 조건은
WHERE
가 아니라
HAVING
에서 검사해야 합니다.