본문 바로가기
IT 공부/SQL

SQL - (14) GROUP BY, HAVING절

by Happy_Bin 2025. 8. 1.

📊 GROUP BY와 HAVING 절, 통계를 위한 SQL의 기본기

데이터를 분석하거나 통계적으로 처리하는 상황에서 GROUP BY와 HAVING 절은 매우 자주 사용된다.
이 두 절은 함께 쓰이는 경우가 많지만, 각각의 역할과 사용 시 주의할 점을 이해하는 것이 중요하다.


🔹 GROUP BY는 데이터를 묶는 역할을 한다

GROUP BY 절은 특정 컬럼의 값을 기준으로 데이터를 그룹화한다.
이렇게 그룹핑된 데이터는 요약하거나 비교하기에 적합한 형태가 되며, 통계 분석 시 핵심적인 기능을 수행한다.

예를 들어 부서별 평균 연봉이나, 제품 카테고리별 판매 건수를 구하고 싶을 때 사용한다.

다만 GROUP BY는 시스템 부하가 큰 연산에 해당하므로,
가능하다면 먼저 WHERE 절을 통해 필요한 데이터만 선별하고 그룹핑하는 것이 좋다.


🔸 집계 함수는 그룹 단위로 값을 계산한다

GROUP BY로 묶은 데이터에는 대부분 집계 함수가 함께 사용된다.
집계 함수는 각 그룹에 대해 합계, 평균, 개수 등을 계산할 수 있게 해준다.

COUNT(컬럼) NULL을 제외한 행의 개수를 반환한다
SUM(컬럼) 컬럼값의 총합을 반환한다
AVG(컬럼) 컬럼값의 평균을 반환한다
MIN(컬럼) 컬럼값의 최솟값을 반환한다
MAX(컬럼) 컬럼값의 최댓값을 반환한다
 

이 외에도 DISTINCT 키워드를 사용하면 중복 값을 제거할 수 있다.
예를 들어 COUNT(DISTINCT 고객ID)라고 작성하면, 고객 ID가 중복되지 않은 수만 계산된다.

다만 집계 함수 내부에 DISTINCT를 사용할 경우,
집계 대상이 제한되므로 실제 결과가 예상과 다를 수 있다. 주의해서 사용해야 한다.


🔻 HAVING은 그룹핑 이후 조건을 적용한다

HAVING 절은 GROUP BY로 묶은 결과에 조건을 적용할 때 사용한다.
WHERE 절과의 가장 큰 차이점은 집계 함수의 사용 가능 여부다.

WHERE은 그룹핑 전에 데이터를 필터링할 때 사용하고,
HAVING은 그룹핑 후 집계된 결과를 기준으로 필터링할 때 사용한다.

예를 들어 부서별 인원 수를 구한 뒤,
인원이 5명 이상인 부서만 보고 싶다면 HAVING을 사용해야 한다.

SELECT 부서, COUNT(*) AS 인원수  
FROM 사원  
GROUP BY 부서  
HAVING COUNT(*) >= 5;

이 쿼리에서 HAVING 절은 GROUP BY 이후 실행되기 때문에,
COUNT(*)처럼 집계된 값을 조건으로 사용할 수 있다.


📎실무와 시험 모두에서 자주 쓰이는 SQL 패턴

  • GROUP BY는 데이터를 그룹화한다.
  • 집계 함수는 그룹 단위로 통계 값을 계산한다.
  • HAVING은 집계 결과를 기준으로 조건을 필터링할 수 있다.
  • WHERE은 집계 전 필터링, HAVING은 집계 후 필터링이다.
  • 성능을 위해 WHERE → GROUP BY → HAVING 순서를 고려하는 것이 좋다.

📮 BeanSight | 해피빈(HappyBin)
보이지 않는 GROUP BY와 HAVING의 흐름은, 데이터의 논리를 정리하는 첫 번째 관문이 된다.
통계는 숫자가 아니라 구조를 보는 언어다.

'IT 공부 > SQL' 카테고리의 다른 글

SQL - (16) 표준 조인  (7) 2025.08.05
SQL - (15) ORDER BY 절과 조인  (4) 2025.08.04
SQL - (13) WHERE절  (4) 2025.07.31
SQL - (12) 함수  (2) 2025.07.30
SQLD - (11) SELECT 문  (1) 2025.07.29