그룹함수
SQL에서 ROLLUP, CUBE, GROUPING SETS는 데이터 집계를 확장하여 다양한 차원의 집계 결과를 한 번에 계산할 수 있는 기능입니다. 이를 통해 다차원 분석을 할 때 많은 쿼리를 줄일 수 있어 데이터 요약과 분석에 유용합니다.
ROLLUP
ROLLUP은 GROUP BY와 함께 사용하여 계층적 집계 결과를 계산하는 데 유용합니다.(GROUP BY절에 들어가는 칼럼을 대상으로 하위 그룹피을 수행하는 함수)
지정한 열 순서대로 부분 합계를 계산하고, 마지막에 전체 합계를 추가해줍니다.
SELECT column1, column2, SUM(column3) AS total
FROM table_name
GROUP BY column1, column2 WITH ROLLUP;
예시:
SELECT department, job_title, SUM(salary) AS total_salary
FROM employees
GROUP BY department, job_title WITH ROLLUP;
각 부서(department)와 직책(job_title)별 급여 합계를 계산하고, 부서별 합계 및 전체 합계를 추가로 반환합니다.
결과에는 (department NULL, job_title NULL) 행이 추가되어 전체 급여 합계를 표시합니다.
- 활용:
- 특정 열을 기준으로 중간 합계와 최종 합계를 구할 때 유용합니다.
- ROLLUP의 첫 번째 열이 가장 높은 수준의 집계가 됩니다.
CUBE
CUBE는 GROUP BY와 함께 사용하여 모든 가능한 조합에 대해 집계를 계산합니다.
ROLLUP이 계층적으로 부분 합계를 계산하는 반면, CUBE는 지정된 열의 모든 조합에 대해 총합을 구합니다.
SELECT column1, column2, SUM(column3) AS total
FROM table_name
GROUP BY column1, column2 WITH CUBE;
예시:
SELECT region, product_category, SUM(sales) AS total_sales
FROM sales_data
GROUP BY region, product_category WITH CUBE;
region과 product_category의 모든 조합에 대해 총매출(total_sales)을 계산하고, 각 조합과 함께 열 수준 합계, 전체 합계도 포함하여 반환합니다.
결과에는 region, product_category가 각각 NULL인 행들이 추가되어, 각각의 조합에 대해 합계가 포함됩니다.
- 활용:
- 다차원 데이터를 분석할 때 모든 차원 조합의 합계를 구할 때 사용됩니다.
- 여러 열을 기준으로 각 조합에 대한 집계를 효율적으로 수행할 수 있습니다.
GROUPING SETS
GROUPING SETS는 GROUP BY 절의 확장 기능으로, 특정 그룹 집합만을 선택적으로 집계할 수 있습니다.
ROLLUP과 CUBE는 모든 계층 또는 모든 조합을 집계하는 반면, GROUPING SETS는 필요한 그룹화 조합만 지정할 수 있어 유연성이 높습니다.
SELECT column1, column2, SUM(column3) AS total
FROM table_name
GROUP BY GROUPING SETS ((column1), (column2), (column1, column2));
예시:
SELECT department, job_title, SUM(salary) AS total_salary
FROM employees
GROUP BY GROUPING SETS ((department), (job_title), (department, job_title));
department별 합계, job_title별 합계, 그리고 department와 job_title의 조합별 합계를 계산합니다.
결과에는 지정한 그룹화 조합에 따라 다양한 수준의 합계가 포함됩니다.
- 활용:
- 지정한 열 조합별로만 집계를 수행하여 ROLLUP이나 CUBE보다 더욱 유연한 집계가 가능.
- 필요하지 않은 조합을 생략할 수 있어 데이터 처리 효율을 높일 수 있습니다.
GROUPING
GROUPING은 ROLLUP, CUBE, GROUPING SETS 결과에서 각 행이 특정 그룹화 수준의 데이터인지, 상위 집계 수준의 데이터인지를 구분할 수 있게 해줍니다. GROUPING(column_name)은 결과가 상위 집계 수준일 경우 1을 반환하고, 개별 그룹의 집계 결과라면 0을 반환합니다.
SELECT column1, column2, SUM(column3) AS total,
GROUPING(column1) AS is_grouped_column1,
GROUPING(column2) AS is_grouped_column2
FROM table_name
GROUP BY column1, column2 WITH ROLLUP;
예시:
SELECT department, job_title, SUM(salary) AS total_salary,
GROUPING(department) AS is_department_group,
GROUPING(job_title) AS is_job_title_group
FROM employees
GROUP BY department, job_title WITH ROLLUP;
is_department_group가 1일 경우 department는 전체 부서 수준의 합계를 의미하며, is_job_title_group가 1일 경우 job_title은 전체 직책 수준의 합계를 의미합니다.
- 활용 예시:
- 집계 수준 표시: GROUPING 함수는 데이터가 각 그룹 수준의 합계인지, 전체 합계인지 식별할 때 유용합니다.
- CASE와 함께 사용하여 GROUPING(column_name) = 1일 때 특정 텍스트로 대체해, 보고서나 시각화에서 각 집계 수준을 명확하게 표시할 수 있습니다.
요약 ✍️
- ROLLUP: 계층적 집계를 수행하여 부분 합계와 전체 합계를 제공합니다. 첫 번째 열이 높은 수준의 그룹화 기준이 됩니다.
- CUBE: 모든 조합에 대해 집계하여 다차원 분석이 가능하며, 모든 열 조합에 대해 합계를 반환합니다.
- GROUPING SETS: 지정한 그룹화 조합에 대해 집계를 수행하며, 불필요한 조합을 생략할 수 있어 더욱 유연한 집계가 가능합니다.
- GROUPING : ROLLUP, CUBE, GROUPING SETS 결과에서 특정 행이 상위 집계인지 개별 그룹 집계인지 구분합니다.
이 네 가지 기능은 데이터의 다양한 집계 결과를 한 번에 생성하여 다차원적인 분석을 수행할 수 있도록 돕습니다.
ROLLUP, CUBE, GROUPING SETS와 같은 SQL 그룹 함수는 복잡한 다차원 분석을 간소화하여 다양한 차원의 집계 결과를 쉽게 확인할 수 있게 해줍니다. 각 기능의 특성과 활용 방안을 이해하면 데이터의 요약과 분석에 있어 더 효율적이고 유연한 접근이 가능해집니다.
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL 개념 정리 13] 계층형 질의와 셀프 조인 (1) | 2024.11.15 |
---|---|
[SQL 개념 정리 12] Top N 쿼리 (0) | 2024.11.15 |
[SQL 개념 정리 10] 집합연산자 (0) | 2024.11.15 |
[SQL 개념 정리 9] 서브쿼리 (3) | 2024.11.15 |
[SQL 개념 정리 8] CTE (WITH 문) (0) | 2024.11.14 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!