핵심 전환점: 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 에서 검사해야 합니다.