WHERE 가 행 필터; HAVING 이 그룹 필터
WHERE 가 row-level — 그룹핑 전 실행. HAVING 이 group-level — 집계 후 실행. 둘이 행복하게 공존: WHERE 가 GROUP BY 입력 좁힘; HAVING 이 출력 좁힘.
외울 실행 파이프라인
FROM / JOIN → raw 결합 행 WHERE → 개별 행 필터 GROUP BY → 그룹으로 collapse HAVING → 그룹 필터 SELECT → 컬럼 고르기, 계산, alias ORDER BY → 정렬 LIMIT / OFFSET → 출력 cap
이 순서가 '왜 내 쿼리 안 됨' 모든 질문 설명. Aggregate 가 WHERE 에 못 나옴 — WHERE 시점에 aggregate 존재 안 함. SELECT 에 정의된 alias 가 WHERE 에 못 쓰임 — SELECT 가 WHERE 후 실행.