SQL & 데이터베이스/SQL 기본 문법 & 오류
[SQL] GROUP BY와 HAVING 절 차이 및 활용법
Jinsapp
2025. 3. 12. 13:49
[SQL] GROUP BY와 HAVING 절 차이 및 활용법
1. GROUP BY란?
GROUP BY는 데이터를 특정 컬럼 기준으로 그룹화하여 **집계 함수(Aggregate Function)**와 함께 사용하는 SQL 절입니다.
✔️ 주요 사용 목적:
- 데이터를 그룹별로 묶어 통계 정보 생성
- SUM, COUNT, AVG, MAX, MIN 등 집계 함수와 함께 사용
✅ 예제 1: 부서별 평균 급여 조회
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
📌 결과:
department | avg_salary |
---|---|
IT | 6000 |
HR | 4500 |
Finance | 5200 |
2. HAVING 절이란?
HAVING 절은 **GROUP BY로 그룹화한 결과에 조건을 적용**할 때 사용합니다.
✔️ 주요 사용 목적:
- 집계 함수 결과에 조건을 적용할 때 사용
- WHERE 절과 달리 **개별 행이 아닌 그룹화된 데이터에 조건 적용**
✅ 예제 2: 평균 급여가 5000 이상인 부서 조회
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) >= 5000;
📌 결과:
department | avg_salary |
---|---|
IT | 6000 |
Finance | 5200 |
3. WHERE 절과 HAVING 절의 차이
WHERE 절과 HAVING 절은 조건을 적용하는 대상이 다릅니다.
구분 | WHERE | HAVING |
---|---|---|
적용 대상 | 개별 행 | 그룹화된 데이터 |
집계 함수 사용 | 불가능 | 가능 |
사용 위치 | GROUP BY 이전 | GROUP BY 이후 |
✅ 예제 3: WHERE vs HAVING
-- WHERE 사용: 급여가 3000 이상인 직원만 그룹화
SELECT department, AVG(salary) AS avg_salary
FROM employees
WHERE salary >= 3000
GROUP BY department;
-- HAVING 사용: 부서별 평균 급여가 5000 이상인 부서만 출력
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) >= 5000;
📌 결과:
department | avg_salary |
---|---|
IT | 6000 |
Finance | 5200 |
🔍 결론
- ✔ **GROUP BY**: 데이터를 그룹화하여 집계 함수와 함께 사용
- ✔ **HAVING**: 그룹화된 데이터에서 집계 결과에 조건을 적용
- ✔ **WHERE vs HAVING 차이**: WHERE는 개별 행 필터링, HAVING은 그룹 데이터 필터링