sql문을 안다룬지 너무 오래되다 보니까 HAVING절과 WHERE절이 헷갈릴때가 있어서 정리한다.
간단히 말해서 WHERE절은 테이블의 원본 데이터를 조건에 따라 필터링하고, HAVING절은 그룹화된 결과에 대한 집계 함수 결과를 조건에 따라 필터링한다.
다음과 같은 쿼리를 생각해보자.
SELECT DEPARTMENT, AVG(SALARY) AS AVG_SALARY
FROM EMPLOYEES
WHERE AGE >= 30
GROUP BY DEPARTMENT
HAVING AVG(SALARY) > 50000;
이 쿼리에서 WHERE 절은 나이가 30이상인 레코드를 필터링하고, GROUP BY절을 통해 부서별로 그룹화한다. 그리고 HAVING 절은 각 부서별 평균 급여가 50000보다 큰 경우만 선택한다.