SQL ROLLUP 함수로 다차원 집계 결과 출력

1. 핵심 원리

ROLLUP은 SQL에서 사용되는 그룹 함수로, 여러 수준의 집계 결과를 함께 출력할 수 있습니다. 기본적으로 지정된 열에 대해 부분 합계를 계산하고, 마지막에 전체 합계를 추가합니다. ROLLUP은 계층적 집계 결과를 생성하는 데 매우 유용합니다.

2. 실무에서 쓰이는 이유

실무에서 ROLLUP 함수는 다음과 같은 이유로 사용됩니다:

  • 다차원 집계: 여러 수준의 요약 데이터를 한 번에 계산할 수 있어, 다양한 집계 수준에서 데이터를 쉽게 분석할 수 있습니다.
  • 보고서 생성: 부서별, 직책별, 또는 지역별로 요약된 데이터를 보고서에 출력할 때 유용합니다.

3. 실무에서 구체적으로 사용되는 상황

ROLLUP 함수는 다음과 같은 상황에서 자주 사용됩니다:

  • 매출 분석: 지역별, 제품별, 그리고 전체 매출을 함께 계산하여 다양한 수준에서 매출 데이터를 분석할 때.
  • 비용 분석: 부서별, 프로젝트별, 그리고 전체 비용을 함께 계산하여 비용 데이터를 다층적으로 분석할 때.

예상 상황 예측:

  • 예시 1: 각 제품 카테고리와 전체 카테고리의 매출을 계산하여 마케팅 전략을 수립.
  • 예시 2: 각 팀과 전체 조직의 성과를 함께 분석하여 팀별 기여도를 평가.

4. 자주 사용되는 윈도우 방식 및 설명

ROLLUP은 기본적으로 그룹 집계와 함께 사용되므로, PARTITION BYORDER BY와 같은 윈도우 방식과는 다른 개념입니다. 그러나 ROLLUP을 사용하는 방법은 다음과 같습니다:

  1. ROLLUP(column1, column2, ...)
  • 설명: 지정된 열들에 대해 부분 합계와 총 합계를 계산합니다. 열의 순서에 따라 집계의 우선순위가 정해지며, 각 단계별로 요약된 결과를 제공합니다.
  • 사용 예시:
    sql SELECT deptno, job, SUM(sal) FROM emp GROUP BY ROLLUP(deptno, job);
  1. 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. 전자상거래 업계에서의 사용 예시

사용될 수 있는 경우 예측:

  • 카테고리 및 전체 매출 분석: 각 카테고리별, 상품별 매출을 분석하면서 전체 매출을 한 번에 계산.
  • 고객 그룹 분석: 각 고객 그룹별, 세분화된 고객 그룹별 매출을 계산하면서 전체 고객 매출을 분석.

예상 상황 문제:

  1. 각 상품 카테고리별, 각 상품별, 그리고 전체 상품의 매출 합계를 계산하는 SQL 쿼리를 작성하시오.
  2. 각 고객 세그먼트별, 각 고객별, 그리고 전체 고객의 구매 금액 합계를 계산하는 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_idproduct_idtotal_sales
11015000
11027000
1NULL12000
22018000
2NULL8000
NULLNULL20000

문제 2 SQL 코드:

SELECT segment_id, customer_id, SUM(purchase_amount) AS total_purchases
FROM customer_purchases
GROUP BY ROLLUP(segment_id, customer_id);
예시 테이블:
segment_idcustomer_idtotal_purchases
110013000
110025000
1NULL8000
220012000
2NULL2000
NULLNULL10000

Posts created 411

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top