본문 바로가기
데이터베이스

[SQL] GROUP BY

by 개발자K씨 2024. 1. 12.

SQL의 GROUP BY 문은 데이터베이스 관리 시스템에서 중요한 역할을 수행하는 구문 중 하나입니다. 이 구문은 결과 집합에서 하나 이상의 열에 대해 집계 함수를 적용하여 유사한 데이터를 그룹화하는 데 사용됩니다. 이 글에서는 GROUP BY의 다양한 사용법에 대해 알아보겠습니다.

기본 개념

정의와 목적

GROUP BY 구문은 선택한 열(들)의 값이 유사한 행들을 하나의 그룹으로 묶습니다.
주로 집계 함수(Aggregate Functions)와 함께 사용되며, COUNT, SUM, AVG, MAX, MIN 등이 대표적입니다.
그룹화는 데이터 분석, 요약 보고서 작성, 복잡한 데이터 집합에서 의미 있는 패턴 찾기 등에 유용합니다.

기본 문법

SELECT column1, column2, AGGREGATE_FUNCTION(column3)
FROM table
GROUP BY column1, column2;

사용 사례

  1. 단순 그룹화
  • 특정 열에 대한 그룹화를 통해 집계 함수 적용
SELECT department, COUNT(*) 
FROM employees 
GROUP BY department;

 

이 예시는 각 부서별 직원 수를 계산합니다.

  1. 조건부 그룹화 (HAVING 절 사용)
  • GROUP BY와 함께 HAVING 절을 사용하여 그룹화된 결과에 조건을 적용
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

 

이 예시는 직원 수가 10명 이상인 부서만을 선택합니다.

  1. 여러 열에 대한 그룹화
  • 두 개 이상의 열을 그룹화하여 복합적인 데이터 분석 수행
SELECT department, job_title, AVG(salary)
FROM employees
GROUP BY department, job_title;

 

이 예시는 각 부서의 각 직책별 평균 급여를 계산합니다.

고급 사용법

  1. 그룹화와 정렬의 결합
  • GROUP BY와 ORDER BY를 결합하여 그룹화된 데이터를 특정 순서로 정렬
SELECT department, AVG(salary)
FROM employees
GROUP BY department
ORDER BY AVG(salary) DESC;

 

이 예시는 각 부서의 평균 급여를 계산하고, 그 결과를 내림차순으로 정렬합니다.

  1. 서브쿼리와 그룹화
  • 서브쿼리를 사용하여 복잡한 그룹화 작업 수행
SELECT department, MAX(average_salary)
FROM (
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department
) AS department_salaries
GROUP BY department;

 

이 예시는 각 부서별 평균 급여를 계산한 후, 이를 다시 그룹화하여 최대 평균 급여를 가진 부서를 찾습니다.

  1. ROLLUP과 CUBE
  • GROUP BY에 ROLLUP 또는 CUBE를 사용하여 다차원적인 데이터 집계 수행
  • ROLLUP은 계층적인 합계(부분 합계와 총합계)를 제공
  • CUBE는 모든 차원에 대한 합계를 제공
SELECT department, job_title, SUM(salary) AS total_salary
FROM employees
GROUP BY CUBE(department, job_title);

 

이 예시는 부서별, 직책별, 그리고 부서와 직책의 조합별로 총급여를 계산합니다.

결론

GROUP BY 구문은 SQL에서 데이터를 분석하고 의미 있는 정보를 추출하는 데 매우 강력한 도구입니다. 단순한 그룹화부터 복잡한 다차원 집계에 이르기까지 다양한 방법으로 활용될 수 있으며, 이를 통해 데이터에서 깊이 있는 인사이트를 얻을 수 있습니다. 데이터 분석과 관련된 작업에서 GROUP BY의 역할은 매우 중요하며, 효과적인 데이터 처리와 보고서 작성에 필수적인 요소로 간주됩니다.