내 잡다한 노트

Grouping 이란? 본문

DB

Grouping 이란?

peanutwalnut 2025. 1. 21. 11:34

데이터베이스에서 **그룹화(Grouping)**는 데이터를 특정 기준(컬럼 값)에 따라 묶어서 집계(Aggregation) 작업을 수행하기 위해 사용됩니다. 그룹화는 주로 데이터를 요약하고 분석하는 데 유용합니다.

SQL에서는 GROUP BY 명령어를 사용하여 그룹화를 수행합니다.

 

1. 그룹화의 목적

1.1 데이터 요약

  • 그룹화는 개별 데이터 항목을 집계하여 전체 데이터를 요약하는 데 사용됩니다.
  • 예: 각 부서별 평균 급여 계산
  • SELECT department, AVG(salary) AS avg_salary
    FROM employees
    GROUP BY department;

1.2 데이터 분석

  • 그룹화는 데이터의 특정 패턴이나 경향을 파악하기 위해 자주 사용됩니다.
  • 예: 월별 판매량 집계
  • SELECT MONTH(order_date) AS month, SUM(sales) AS total_sales
    FROM orders
    GROUP BY MONTH(order_date);

 

1.3 보고서 생성

  • 그룹화는 데이터베이스 내 데이터를 기반으로 요약 보고서를 생성하는 데 필수적입니다.
  • 예: 지역별 총 매출 보고서
  • SELECT region, SUM(revenue) AS total_revenue
    FROM sales
    GROUP BY region;

 

2. 그룹화의 동작 원리

2.1 그룹화의 기본 개념

  • GROUP BY는 동일한 값으로 묶인 행들을 하나의 그룹으로 처리합니다.
  • 각 그룹에 대해 **집계 함수(Aggregate Function)**를 적용하여 데이터를 요약합니다.
    • 집계 함수: COUNT(), SUM(), AVG(), MAX(), MIN() 등.

 

 

2.2 그룹화의 흐름

  1. FROM 절로 데이터를 선택.
  2. WHERE 절로 데이터를 필터링.
  3. GROUP BY로 데이터를 그룹화.
  4. 그룹별로 집계 함수가 계산.
  5. (옵션) HAVING 절로 집계된 데이터 필터링.
  6. SELECT 절에 결과 출력.

 

3. 그룹화의 사용 예

3.1 단순 그룹화

  • 부서별 직원 수를 계산:
     
    SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;

3.2 그룹화 + 조건

  • 급여가 50000 이상인 직원들만 포함하여 부서별 평균 급여:
     
    SELECT department, AVG(salary) AS avg_salary FROM employees WHERE salary >= 50000 GROUP BY department;

3.3 그룹화 + 필터링(HAVING)

  • 부서별 평균 급여가 60000 이상인 부서만 선택:
     
    SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING AVG(salary) >= 60000;

 

4. 그룹화가 필요한 이유

4.1 대량 데이터 분석

  • 그룹화를 사용하면 대량의 데이터를 분석하고 요약할 수 있습니다.
  • 예: 수백만 개의 거래 데이터에서 지역별 매출 합계를 계산.

4.2 데이터 간 패턴 파악

  • 특정 기준으로 데이터를 그룹화하면 데이터를 비교하거나 트렌드를 분석할 수 있습니다.
  • 예: 시간(월, 분기)별 매출 변화.

4.3 간소화된 데이터 표현

  • 그룹화를 통해 원시 데이터를 요약된 형태로 표현하여 가독성을 높입니다.
  • 예: 개별 직원 급여 데이터 대신, 부서별 급여 평균만 표시.

 

5. 그룹화와 집계 함수의 관계

그룹화는 보통 **집계 함수(Aggregate Function)**와 함께 사용됩니다. 각 집계 함수의 역할은 다음과 같습니다:

집계 함수설명예시

COUNT() 그룹별 행의 개수 계산 COUNT(*) → 직원 수 계산
SUM() 그룹별 합계 계산 SUM(sales) → 총 매출 계산
AVG() 그룹별 평균 계산 AVG(salary) → 부서별 평균 급여 계산
MAX() 그룹별 최대값 MAX(salary) → 부서별 최대 급여
MIN() 그룹별 최소값 MIN(salary) → 부서별 최소 급여

 

 

6. 그룹화 사용 시 주의사항

6.1 GROUP BY 필수 포함 컬럼

  • SELECT 절에 나오는 컬럼은 모두 GROUP BY에 포함되어야 합니다.
     
    SELECT column1, column2, SUM(column3) FROM table_name GROUP BY column1, column2;

6.2 HAVING vs WHERE

  • WHERE: 그룹화 이전에 데이터를 필터링.
  • HAVING: 그룹화 이후에 데이터를 필터링.

 

 

 

 

'DB' 카테고리의 다른 글

트랜잭션 (Transaction)  (0) 2025.01.21
Shard 란?  (0) 2025.01.21
SQL 쿼리 기본적인 것들 정리 (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER )  (0) 2025.01.21
순차 쓰기와 랜덤쓰기  (0) 2025.01.20
B-Tree란?  (0) 2025.01.20