더북(TheBook)

CUBE(expr1, expr2, …)

CUBE는 ROLLUP과 비슷하나 개념이 약간 다르다. ROLLUP이 레벨별로 순차적 집계를 했다면, CUBE는 명시한 표현식 개수에 따라 가능한 모든 조합별로 집계한 결과를 반환한다. CUBE는 2의(expr 수)제곱 만큼 종류별로 집계 된다. 예를 들어, expr 수가 3이면, 집계 결과의 유형은 총 2^3^ = 8개가 된다.

입력

    SELECT period, gubun, SUM(loan_jan_amt) totl_jan
      FROM kor_loan_status
     WHERE period LIKE '2013%'
     GROUP BY CUBE(period, gubun) ;

결과

    PERIOD  GUBUN            TOTL_JAN
    -------- -------------- -------------
                             2182852.1 →①
             기타대출        1357199.3 →②
             주택담보대출    825652.8  →②
    201310                   1087493.9 →③
    201310   기타대출        676078    →④
    201310   주택담보대출    411415.9  →④
    201311                   1095358.2 →③
    201311   기타대출        681121.3  →④
    201311   주택담보대출    414236.9  →④

expr 수가 2이므로 2^2^ = 4가 되어 총 네 가지 유형으로 집계가 되는데, 위 결과를 보면 전체(①), 대출종류별(②), 월별 (③), 월별 대출 종류별(④)로 잔액이 집계되었다.

ROLLUP과 마찬가지로 분할 CUBE 유형도 사용할 수 있다. 예를 들어 GROUP BY expr1, CUBE(expr2, expr3)로 명시했을 때, (expr1, expr2, expr3), (expr1, expr2), (expr1, expr3), (expr1) 총 4가지(2^2^) 유형으로 집계된다.

입력

    SELECT period, gubun, SUM(loan_jan_amt) totl_jan
      FROM kor_loan_status
     WHERE period LIKE '2013%'
     GROUP BY period, CUBE( gubun );

결과

    PERIOD    GUBUN         TOTL_JAN
    -------- ------------- ---------------
    201310                  1087493.9
    201310   기타대출       676078
    201310   주택담보대출   411415.9
    201311                  1095358.2
    201311   기타대출       681121.3
    201311   주택담보대출   414236.9

위 공식에 따라 분할해보면, (period, gubun), (period)별로 집계된 것을 확인할 수 있다.

ROLLUP과 CUBE 개념은 알 듯 하면서도 좀 혼동되는 측면이 있다. 간단히 정리해 보면 표현식 개수에 따라 ROLLUP은 레벨별로, CUBE는 가능한 조합별로 집계를 수행한다고 이해하자. 다음의 표는 ROLLUP과 CUBE 표현식 개수별 집계 유형을 표현한 것이다.

표 5-1 ROLLUP과 CUBE 집계
표현식 집계 종류
ROLLUP(expr1, expr2) expr1 + expr2
expr1
전체
GROUP BY expr1, ROLLUP (expr2, expr3) expr1 + ( expr2 + expr3)
expr1 + ( expr2)
expr1
GROUP BY ROLLUP(expr1), expr2 expr2 + expr1
expr2
CUBE (expr1, expr2) expr1 + expr2
expr1
expr2
전체
GROUP BY expr1, CUBE ( expr2, expr3) expr1 + ( expr2 + expr3)
expr1 + ( expr2)
expr1 + ( expr3)
expr1
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.