[Oracle] 오라클 그룹별 소계 합계 구하기 (ROLLUP, CUBE)

ROULLUP과 CUBE을 사용하면 그룹별 소계 및 합계를 출력할 수 있습니다. 그룹별 소계 및 합계를 구하려면 우선 그룹핑된 데이터가 필요합니다.

 

샘플 데이터

SELECT PERIOD, GUBUN, SUM(LOAN_JAN_AMT)
FROM
KOR_LOAN_STATUS
GROUP BY PERIOD, GUBUN
ORDER BY PERIOD

샘플 데이터

위의 데이터는 대출년도, 대출명으로 대출금액의 합계값을 나타낸 데이터입니다. 이 데이터를 바탕으로 소계와 합계를 구해보도록 하겠습니다.

 

ROLLUP

ROLLUP은 추가적인 집계 정보를 보여주는 기법입니다. ROLLUP절에는 그룹핑 된 컬럼을 나열 할 수 있으며 명시된 나열한 컬럼의수에 따라 레벨 별로 집계한 결과가 반환됩니다. 나열한 컬럼의 수가 N개이면 N+1레벨까지, 하위 레벨에서 상위레벨 순으로 데이터가 집계됩니다.

SELECT PERIOD, GUBUN, SUM(LOAN_JAN_AMT)
FROM
KOR_LOAN_STATUS
GROUP BY ROLLUP(PERIOD, GUBUN)
ORDER BY PERIOD

Rollup

ROLLUP에 두개의 컬럼이 들어갔으므로 총 레벨의 수는 3이 됩니다.(컬럼숫자 + 1) 순서대로 풀어본다면 2개의 컬럼(대출년도, 대출종류)가 레벨3이되고 (대출년도)가 레벨2, 전체의 합계가 레벨1이 되는것을 보실 수 있습니다.

 

CUBE

ROLLUP은 레벨별로 순차적으로 집계를 한다면 CUBE는 명시한 컬럼의 개수에 따라 가능한 모든 조합별로 집계한 결과를 반환합니다. 예를들어 컬럼의 숫자가 2개가 들어간다면 2의제곱이 되어 4개의 유형이 나오게됩니다.

SELECT PERIOD, GUBUN, SUM(LOAN_JAN_AMT)
FROM
KOR_LOAN_STATUS
GROUP BY CUBE(PERIOD, GUBUN)
ORDER BY PERIOD

Cube

CUBE에 2개의 컬럼이 명시되었으므로 총 유형은 2의 제곱이 되어 4가지 유형이 집계가 됩니다. 위의 결과를 보면 전체, 대출종류별, 월별, 월별 대출 종류별로 잔액이 집계된것을 확인하실 수 있습니다.

 

참고자료 : https://thebook.io/006696/

댓글

Designed by JB FACTORY