WHERE는 묶기 전, HAVING은 묶은 뒤
논리적 평가는 FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT/OFFSET 순서야. 그래서 WHERE 시점에는 집계값도 SELECT에서 만든 별칭도 아직 없고, 집계 조건은 HAVING에 둬야 해. “최근 주문만 모아 고객별로 세고, 주문이 5건 넘는 고객만 보여줘”라는 순서를 그대로 SQL에 옮기면 돼.
집계 함수는 HAVING에서
WHERE COUNT(*) > 5는 아직 그룹이 만들어지기 전이라 쓸 수 없어. COUNT 조건은 HAVING에 둬. 먼저 완료된 주문만 WHERE로 좁히고, 묶은 뒤 5건 기준을 적용하면 계산량과 뜻이 모두 분명해져.