본문 바로가기

SQL & 데이터베이스/SQL 기본 문법 & 오류

[SQL] GROUP BY와 HAVING 절 차이 및 활용법

[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;
📌 결과:
departmentavg_salary
IT6000
HR4500
Finance5200

2. HAVING 절이란?

HAVING 절은 **GROUP BY로 그룹화한 결과에 조건을 적용**할 때 사용합니다.

✔️ 주요 사용 목적:

  • 집계 함수 결과에 조건을 적용할 때 사용
  • WHERE 절과 달리 **개별 행이 아닌 그룹화된 데이터에 조건 적용**

✅ 예제 2: 평균 급여가 5000 이상인 부서 조회


SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) >= 5000;
📌 결과:
departmentavg_salary
IT6000
Finance5200

3. WHERE 절과 HAVING 절의 차이

WHERE 절과 HAVING 절은 조건을 적용하는 대상이 다릅니다.

구분WHEREHAVING
적용 대상개별 행그룹화된 데이터
집계 함수 사용불가능가능
사용 위치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;
📌 결과:
departmentavg_salary
IT6000
Finance5200

🔍 결론

  • ✔ **GROUP BY**: 데이터를 그룹화하여 집계 함수와 함께 사용
  • ✔ **HAVING**: 그룹화된 데이터에서 집계 결과에 조건을 적용
  • ✔ **WHERE vs HAVING 차이**: WHERE는 개별 행 필터링, HAVING은 그룹 데이터 필터링

📖 다른 SQL 개념도 함께 확인하세요!

👉 SQL 조인(JOIN) 활용 가이드 보러 가기