SQL

[SQL#9] GROUP BY / HAVING

j.d 2025. 4. 16. 20:25

SQL에서 데이터를 그룹 단위로 요약하거나 조건을 걸고 싶을 때 사용하는 문법이 GROUP BY와 HAVING입니다.
특히 COUNT, SUM, AVG 등의 집계 함수와 함께 쓰일 때 강력한 기능을 발휘합니다.

 

 

1. GROUP BY

GROUP BY 함수는 컬럼 내 공통된 값을 기준으로 데이터를 그룹화합니다.

SELECT 그룹기준컬럼, 집계함수
FROM 테이블명
GROUP BY 그룹기준컬럼;

 

SELECT department, COUNT(*) AS count
FROM employees
GROUP BY department;

→ 부서별로 몇 명의 직원이 있는지 집계

department count
Sales 5
HR 2
IT 3

 

 

2. HAVING

HAVING 함수는 그룹화된 결과에 조건을 적용할 때 사용됩니다.

SELECT 그룹기준컬럼, 집계함수
FROM 테이블명
GROUP BY 그룹기준컬럼
HAVING 조건;

 

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;

→ 평균 급여가 5000 이상인 부서만 조회

 

※ WHERE vs HAVING

구분 WHERE HAVING
시점 그룹화 이전 그룹화 이후
대상 개별 행 조건 그룹 전체(집계 결과) 조건
예시 WHERE salary > 3000 HAVING AVG(salary) > 3000

 

 

예시

예시 테이블: sales

id region sales_amount
1 East 1000
2 East 2000
3 West 1500
4 West NULL
5 South 3000

1) 지역별 매출 합계

SELECT region, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region;

→ NULL 제외 후 지역별 합계를 반환

region total_sales
East 3000
West 1500
South 3000

 

2) 매출 합계가 2000 이상인 지역만 조회

SELECT region, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY region
HAVING SUM(sales_amount) >= 2000;

→ 그룹화된 결과에 조건을 걸 때는 HAVING 사용

region total_sales
East 3000
South 3000