WHERE가 데이터를 하나씩(Row) 검사해서 필터링한다면, HAVING은 그룹핑이 다 끝난 결과(Group)를 대상으로 필터링을 수행합니다. "부서별 평균 급여가 5000 이상인 부서만" 찾을 때는 WHERE가 아니라 HAVING을 써야 합니다.
💡 핵심 비유
묶음 상품 전용 검사기 사과를 바구니에 담는 과정에서 썩은 사과를 버리는 건 WHERE, 사과를 다 담고 나서 무게가 5kg 미만인 바구니 전체를 버리는 건 HAVING입니다.
🧩 원리 이해하기
Script-1.sql
1
-- 직무(ROLE)별로 그룹화한 뒤,
-- 평균 급여(AVG_SAL)가 6000 이상인 직무 그룹만 결과에 포함시킵니다.
SELECT ROLE, AVG(SALARY) AS AVG_SAL
FROM EMPLOYEES
GROUP BY ROLE
HAVING AVG(SALARY) >= 6000;