GROUP BY ROLLUP과 CUBE

LeeYulhee·2023년 12월 19일
0

👉 ROLLUP


  • 기능
    • ROUP BY ROLLUP은 여러 컬럼에 걸쳐 계층적인 데이터 집계를 생성
    • 이는 주로 부분합(subtotals)과 총합(grand total)을 계산할 때 사용

  • 동작 방식
    • 만약 GROUP BY ROLLUP(a, b)가 있다면, 이는 a, b 두 컬럼에 대한 집계뿐만 아니라, a에 대한 집계, 그리고 전체 집계(총합)를 모두 계산

  • 사용 방법 및 설명
    • 계층적 소계 생성
      • ROLLUP은 지정된 컬럼들에 대해 계층적으로 소계(subtotal)를 계산
      • 이는 주로 부분합과 총계를 얻기 위해 사용됨
      • 예를 들어, ROLLUP(a, b)는 a에 대한 소계, a와 b의 조합에 대한 소계, 그리고 전체 데이터에 대한 총계를 계산
    • 순차적 소그룹 생성
      • ROLLUP은 지정된 컬럼 순서에 따라 소그룹을 생성
      • 첫 번째 컬럼에서 시작하여 점차 다음 컬럼을 추가하며 소그룹을 형성
      • 예를 들어, ROLLUP(a, b, c)는 a, a와 b, a와 b와 c, 그리고 전체 데이터에 대한 소계를 계산
    • 부분합과 총계 반환
      • 계산된 각 소그룹의 부분합과 전체 데이터에 대한 총계를 결과로 반환
    • 간결한 결과 제공
      • ROLLUPCUBE보다 더 제한적인 소그룹을 생성
      • 이는 필요한 부분합과 총계만을 계산하여 더 간결한 결과를 제공
    • 데이터 분석 용이
      • ROLLUP을 사용하면 데이터를 계층적으로 분석할 수 있으며, 각 계층에서 중요한 트렌드나 패턴을 식별할 수 있음

  • 예시
    • 지역과 상품 카테고리에 따른 판매량을 집계할 때, ROLLUP을 사용하면 각 지역별 총 판매량, 각 카테고리별 총 판매량, 그리고 전체 총 판매량을 한 번의 쿼리로 얻을 수 있음

  • 예제
    SELECT REGION
         , PRODUCT
         , SUM(SALES_AMOUNT) AS TOTAL_SALES
      FROM SALES
     GROUP BY ROLLUP(REGION, PRODUCT);
    • 예상 결과
      RegionProductTotalSales
      서울A1000
      서울B1500
      서울NULL2500
      부산A800
      부산B1200
      부산NULL2000
      NULLNULL4500
      • 이 쿼리는 REGION과 PRODUCT에 대한 부분합과 총계를 계산



👉 CUBE


  • 기능
    • GROUP BY CUBE는 ROLLUP보다 더 포괄적인 데이터 집계를 생성
    • 이는 모든 가능한 조합의 집계(부분합과 총합)를 계산

  • 동작 방식
    • GROUP BY CUBE(a, b)를 사용하면, a와 b의 모든 조합에 대한 집계뿐만 아니라, a에 대한 집계, b에 대한 집계, 그리고 전체 집계도 계산

  • 사용 방법 및 설명
    • 모든 소그룹 간 소계 구하기
      • CUBE는 지정된 모든 컬럼에 대해 가능한 모든 조합의 소그룹을 만들고, 각 소그룹에 대한 소계(subtotal)를 계산
      • 예를 들어, CUBE(a, b)는 a, b, a와 b의 조합, 그리고 전체 데이터에 대한 소계를 계산
    • 모든 소그룹 생성
      • 주어진 컬럼들로 가능한 모든 소그룹을 생성
      • 이는 각 컬럼을 개별적으로, 그리고 조합하여 고려
      • 예를 들어, CUBE(a, b)는 a에 대한 소계, b에 대한 소계, a와 b의 조합에 대한 소계를 모두 포함
    • 그룹 별 소계 반환
      • 이 과정에서 계산된 각 소그룹의 소계를 결과로 반환
    • 복잡한 조합 처리
      • 괄호를 사용하여 복잡한 조합을 만들 수 있음
      • 예를 들어, CUBE(A, (B, C))는 A, B와 C의 조합, 그리고 A와 B와 C의 조합에 대한 소계를 모두 포함
      • 여기서 (B, C)는 하나의 그룹으로 묶여서 처리
    • 특정 행 고정
      • 만약 특정 컬럼을 항상 포함시키고 싶다면, CUBE에서 해당 컬럼을 제외하고 GROUP BY에 포함시킴
      • 예를 들어, GROUP BY a, CUBE(b)는 a가 고정된 상태에서 b에 대한 소계를 계산
      • 이렇게 하면 a 없이 b에 대한 소계는 계산되지 않음

  • 예시
    • 같은 지역과 상품 카테고리에 대한 예시에서 CUBE를 사용하면, 각 지역별 각 카테고리별 판매량, 각 지역별 총 판매량, 각 카테고리별 총 판매량, 그리고 전체 총 판매량을 모두 얻을 수 있음

  • 예제
    SELECT REGION
         , PRODUCT
         , SUM(SALES_AMOUNT) AS TOTAL_SALES
      FROM SALES
     GROUP BY CUBE(REGION, PRODUCT);
    • 예상 결과
      RegionProductTotalSales
      서울A1000
      서울B1500
      서울NULL2500
      부산A800
      부산B1200
      부산NULL2000
      NULLA1800
      NULLB2700
      NULLNULL4500
      • 이 쿼리는 REGION과 PRODUCT에 대한 모든 조합의 소계를 계산



👉 ROLLUP과 CUBE 사용 이유


  • 효율성
    • 다양한 수준의 집계를 한 번의 쿼리로 얻을 수 있어, 데이터 분석과 보고를 위한 시간과 노력을 크게 줄일 수 있음
  • 분석 용이성
    • 데이터의 다양한 관점에서의 분석을 가능하게 하여, 보다 깊이 있는 인사이트를 얻을 수 있음
  • 유연성
    • 다양한 집계 수준을 통해, 복잡한 데이터 세트에서 필요한 정보를 쉽게 추출하고 분석할 수 있음
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

0개의 댓글