SQL GROUPING SETS 함수

1. 핵심 원리

GROUPING SETS는 SQL에서 다양한 그룹화 결과를 개별적으로 지정하여 집계할 수 있게 해주는 함수입니다. ROLLUP이나 CUBE와는 달리, GROUPING SETS는 특정한 그룹화 집합을 명시적으로 정의할 수 있어 보다 세밀한 제어가 가능합니다.

2. 실무에서 쓰이는 이유

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

  • 세밀한 데이터 분석: 여러 그룹화 조합을 필요에 따라 명확하게 지정할 수 있어, 복잡한 보고서나 분석이 필요한 경우 유용합니다.
  • 효율적인 집계: 필요하지 않은 불필요한 그룹화를 제외하고, 오직 필요한 그룹화 집합만 계산할 수 있습니다.

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

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

  • 매출 분석: 특정 지역과 제품군별로 매출을 분석할 때, 특정 조합에 대해서만 집계를 수행하고자 할 때 유용합니다.
  • 비용 분석: 특정 프로젝트와 부서별 비용을 분석할 때, 원하는 조합의 집계 결과만 출력할 수 있습니다.

예상 상황 예측:

  • 예시 1: 각 제품 카테고리와 제품별 매출을 분석하면서, 특정 카테고리만 별도로 집계하고자 할 때.
  • 예시 2: 각 부서와 프로젝트별 비용을 분석하면서, 특정 부서나 프로젝트에만 집중하고자 할 때.

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

GROUPING SETS는 집계에 필요한 조합을 정확히 지정할 수 있는 장점을 가지고 있습니다. 이는 GROUP BY와 함께 사용되며, ROLLUPCUBE와 달리 특정한 그룹화 집합을 명시적으로 정의할 수 있습니다.

  1. GROUP BY GROUPING SETS(column1, column2, ...)
  • 설명: 여러 그룹화 집합을 명시적으로 지정하여 원하는 조합에 대해 집계 결과를 출력합니다.
  • 사용 예시:
    sql SELECT deptno, job, SUM(sal) FROM emp GROUP BY GROUPING SETS((deptno), (job), ());
  1. GROUP BY와의 비교
  • 설명: 일반적인 GROUP BY는 단일 집합에 대한 집계만을 수행하지만, GROUPING SETS는 여러 집합을 지정하여 각 집합에 대해 집계 결과를 출력할 수 있습니다.
  • 사용 예시:
    sql SELECT deptno, job, SUM(sal) FROM emp GROUP BY deptno, 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 GROUPING SETS((deptno), (job), ());

해답 2:

SELECT category_id, product_id, SUM(sales) AS total_sales
FROM product_sales
GROUP BY GROUPING SETS((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 GROUPING SETS((deptno), (project_id), ());

해답 2:

SELECT region, branch, SUM(revenue) AS total_revenue
FROM branch_sales
GROUP BY GROUPING SETS((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 GROUPING SETS((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 GROUPING SETS((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