[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은 그룹 데이터 필터링
📖 다른 SQL 개념도 함께 확인하세요!
'SQL & 데이터베이스 > SQL 기본 문법 & 오류' 카테고리의 다른 글
[SQL] VIEW(뷰) 개념과 활용 방법 - 성능 최적화 및 관리 팁 (0) | 2025.03.13 |
---|---|
[SQL] 서브쿼리(Subquery) 개념 및 활용 방법 (3) | 2025.03.12 |
[SQL] INNER JOIN vs OUTER JOIN 차이 및 활용법 (0) | 2025.03.12 |
[SQL] ORA-01400: Cannot Insert NULL 오류 해결 방법 (0) | 2025.03.11 |
[SQL] ORA-00904: Invalid Identifier 오류 해결 방법 (0) | 2025.03.10 |