-
[SQL] GROUP BY와 PARTITION BY의 차이점데이터베이스 2024. 10. 14. 11:18728x90반응형
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반응형'데이터베이스' 카테고리의 다른 글
상관 서브쿼리 (Correlated Subquery)란? 종류들 (0) 2024.10.22 NL조인시 드라이빙테이블 100개 드리븐 1000개, 드라이빙테이블1000개 드리븐 100개가 성능 차이가 나는이유 (1) 2024.10.21 쓰기락 for update 사용시 주의점 (mysql,postgresql) (0) 2024.07.11