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

[SQL] GROUP BY와 PARTITION BY의 차이점

by 디찌s 2024. 10. 14.
728x90
반응형

1. GROUP BY

  • 데이터를 그룹화하여 각 그룹당 하나의 결과를 반환합니다.
  • 그룹화된 각 결과에 대해 집계 함수(SUM, AVG, COUNT 등)가 적용됩니다.
  • GROUP BY를 사용하면 데이터가 그룹별로 집계되어, 원래의 개별 행을 유지하지 않습니다.

예시:

SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

 

설명:

  • department_id별로 그룹화하고, 각 부서의 직원 수를 계산합니다.
  • 결과에는 각 부서당 하나의 행만 남습니다. (즉, department_id별로 집계된 결과만 표시)

2. PARTITION BY

  • 데이터를 특정 기준으로 나누지만, 데이터의 원래 행은 유지합니다.
  • 주로 윈도우 함수(ROW_NUMBER(), RANK(), SUM(), AVG())와 함께 사용되어, 각 그룹 내에서 순위를 매기거나 누적 합계 등을 계산할 때 쓰입니다.
  • PARTITION BY는 그룹별로 집계된 결과를 반환하는 것이 아니라, 개별 행마다 계산된 값을 유지합니다.

예시:

SELECT 
    employee_id, 
    department_id, 
    salary, 
    SUM(salary) OVER (PARTITION BY department_id) AS department_total_salary
FROM employees;

 

설명:

  • department_id를 기준으로 파티션을 나누고, 각 부서의 총 급여(SUM(salary))를 계산합니다.
  • 그러나 SUM()의 결과는 각 직원의 행에 그대로 유지되며, 각 직원의 급여 정보와 부서의 총 급여가 함께 표시됩니다.
  • 이 경우 PARTITION BY는 데이터를 집계하는 동시에, 각 행에 계산된 값을 반환하는 데 사용됩니다.

요약:

  • **GROUP BY**는 데이터를 그룹화하여 각 그룹별로 단일 결과를 반환합니다. 집계 후에는 각 그룹당 하나의 결과만 남게 됩니다.
  • **PARTITION BY**는 윈도우 함수와 함께 사용되어, 데이터를 특정 기준으로 나누면서도 각 행의 데이터는 유지한 채로 그룹별 계산을 수행합니다.

즉, GROUP BY는 데이터를 요약하고 축소하는 데 사용되고, PARTITION BY는 데이터의 원래 형태를 유지하면서 그룹별 계산을 추가하는 데 사용됩니다.

728x90
반응형

댓글