HAVING
HAVING은 GROUP BY로 만들어진 그룹에 조건을 적용합니다. WHERE가 행을 필터링한다면, HAVING은 그룹을 필터링합니다. 그룹에 조건 걸기
기본 문법
SELECT 그룹컬럼, 집계함수(컬럼)
FROM 테이블
GROUP BY 그룹컬럼
HAVING 집계조건;예제
직원 2명 이상인 부서
GROUP BY로 부서별 직원 수를 구한 뒤, HAVING으로 2명 이상인 부서만 남깁니다.
SELECT department_id, COUNT(*) AS 직원수
FROM employees
GROUP BY department_id
HAVING COUNT(*) >= 2;평균 급여 5백만 이상 부서
AVG() 결과를 HAVING으로 필터링합니다.
SELECT department_id,
COUNT(*) AS 인원,
AVG(salary) AS 평균급여
FROM employees
GROUP BY department_id
HAVING AVG(salary) >= 5000000
ORDER BY 평균급여 DESC;WHERE와 HAVING 함께 사용
WHERE로 먼저 행을 필터링한 뒤, GROUP BY → HAVING 순서로 처리됩니다.
SELECT department_id, COUNT(*) AS 직원수, SUM(salary) AS 총급여
FROM employees
WHERE hire_date >= '2020-01-01'
GROUP BY department_id
HAVING COUNT(*) >= 2
ORDER BY 총급여 DESC;알아두면 좋은 것
- WHERE는 개별 행을, HAVING은 집계된 그룹을 필터링합니다.
- WHERE 절에는 집계 함수(COUNT, SUM 등)를 쓸 수 없습니다.
- SQL 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
연습 문제
- 직원 2명 이상 부서 · 중급 · HAVING, 집계함수