1. 핵심 원리
ROLLUP은 SQL에서 사용되는 그룹 함수로, 여러 수준의 집계 결과를 함께 출력할 수 있습니다. 기본적으로 지정된 열에 대해 부분 합계를 계산하고, 마지막에 전체 합계를 추가합니다. ROLLUP
은 계층적 집계 결과를 생성하는 데 매우 유용합니다.
2. 실무에서 쓰이는 이유
실무에서 ROLLUP
함수는 다음과 같은 이유로 사용됩니다:
- 다차원 집계: 여러 수준의 요약 데이터를 한 번에 계산할 수 있어, 다양한 집계 수준에서 데이터를 쉽게 분석할 수 있습니다.
- 보고서 생성: 부서별, 직책별, 또는 지역별로 요약된 데이터를 보고서에 출력할 때 유용합니다.
3. 실무에서 구체적으로 사용되는 상황
ROLLUP
함수는 다음과 같은 상황에서 자주 사용됩니다:
- 매출 분석: 지역별, 제품별, 그리고 전체 매출을 함께 계산하여 다양한 수준에서 매출 데이터를 분석할 때.
- 비용 분석: 부서별, 프로젝트별, 그리고 전체 비용을 함께 계산하여 비용 데이터를 다층적으로 분석할 때.
예상 상황 예측:
- 예시 1: 각 제품 카테고리와 전체 카테고리의 매출을 계산하여 마케팅 전략을 수립.
- 예시 2: 각 팀과 전체 조직의 성과를 함께 분석하여 팀별 기여도를 평가.
4. 자주 사용되는 윈도우 방식 및 설명
ROLLUP은 기본적으로 그룹 집계와 함께 사용되므로, PARTITION BY
나 ORDER BY
와 같은 윈도우 방식과는 다른 개념입니다. 그러나 ROLLUP
을 사용하는 방법은 다음과 같습니다:
ROLLUP(column1, column2, ...)
- 설명: 지정된 열들에 대해 부분 합계와 총 합계를 계산합니다. 열의 순서에 따라 집계의 우선순위가 정해지며, 각 단계별로 요약된 결과를 제공합니다.
- 사용 예시:
sql SELECT deptno, job, SUM(sal) FROM emp GROUP BY ROLLUP(deptno, job);
GROUP BY ROLLUP()
- 설명: 그룹화된 데이터에 대해 요약된 집계 결과를 생성합니다.
GROUP BY
와 함께 사용하여 집계의 범위를 확장할 수 있습니다. - 사용 예시:
sql SELECT job, SUM(sal) FROM emp GROUP BY ROLLUP(job);
5. 연습 문제
문제 1:
다음의 테이블에서 부서별, 직책별, 그리고 전체 직원의 급여 합계를 계산하는 SQL 쿼리를 작성하시오.
- 테이블:
employee
- 열:
deptno
,job
,salary
문제 2:
각 제품 카테고리별, 제품별, 그리고 전체 매출 합계를 계산하는 SQL 쿼리를 작성하시오.
- 테이블:
product_sales
- 열:
category_id
,product_id
,sales
6. 연습 문제 해답
해답 1:
SELECT deptno, job, SUM(salary) AS total_salary
FROM employee
GROUP BY ROLLUP(deptno, job);
해답 2:
SELECT category_id, product_id, SUM(sales) AS total_sales
FROM product_sales
GROUP BY ROLLUP(category_id, product_id);
7. 응용 문제
문제 1:
부서별, 프로젝트별, 그리고 전체 부서의 프로젝트 비용 합계를 계산하는 SQL 쿼리를 작성하시오.
- 테이블:
project_costs
- 열:
deptno
,project_id
,cost
문제 2:
각 지역별, 각 지역 내의 지점별, 그리고 전체 지점의 매출 합계를 계산하는 SQL 쿼리를 작성하시오.
- 테이블:
branch_sales
- 열:
region
,branch
,revenue
8. 응용 문제 해답
해답 1:
SELECT deptno, project_id, SUM(cost) AS total_cost
FROM project_costs
GROUP BY ROLLUP(deptno, project_id);
해답 2:
SELECT region, branch, SUM(revenue) AS total_revenue
FROM branch_sales
GROUP BY ROLLUP(region, branch);
9. 전자상거래 업계에서의 사용 예시
사용될 수 있는 경우 예측:
- 카테고리 및 전체 매출 분석: 각 카테고리별, 상품별 매출을 분석하면서 전체 매출을 한 번에 계산.
- 고객 그룹 분석: 각 고객 그룹별, 세분화된 고객 그룹별 매출을 계산하면서 전체 고객 매출을 분석.
예상 상황 문제:
- 각 상품 카테고리별, 각 상품별, 그리고 전체 상품의 매출 합계를 계산하는 SQL 쿼리를 작성하시오.
- 각 고객 세그먼트별, 각 고객별, 그리고 전체 고객의 구매 금액 합계를 계산하는 SQL 쿼리를 작성하시오.
SQL 코드 및 시각적 예시
문제 1 SQL 코드:
SELECT category_id, product_id, SUM(sales) AS total_sales
FROM product_sales
GROUP BY ROLLUP(category_id, product_id);
예시 테이블:
category_id | product_id | total_sales |
---|---|---|
1 | 101 | 5000 |
1 | 102 | 7000 |
1 | NULL | 12000 |
2 | 201 | 8000 |
2 | NULL | 8000 |
NULL | NULL | 20000 |
문제 2 SQL 코드:
SELECT segment_id, customer_id, SUM(purchase_amount) AS total_purchases
FROM customer_purchases
GROUP BY ROLLUP(segment_id, customer_id);
예시 테이블:
segment_id | customer_id | total_purchases |
---|---|---|
1 | 1001 | 3000 |
1 | 1002 | 5000 |
1 | NULL | 8000 |
2 | 2001 | 2000 |
2 | NULL | 2000 |
NULL | NULL | 10000 |