nullジマ

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

연습 문제