오라클(Oracle) 소계, 합계를 구하는 ROLLUP 함수 사용 방법

오라클(Oracle) 소계, 합계를 구하는 ROLLUP 함수 사용 방법

오라클에서 엑셀과 같이 소계, 합계를 구할 수 있습니다. 바로 ROLLUP 함수를 사용하면 간단하게 값을 구할 수 있는데요.
ROLLUP 함수를 막상 사용하려 하면 원하는 결과대로 잘 나오지 않을 수 있습니다.
이번 강좌 역시 어렵지 않아 눈으로 아 ~~ 이렇게 사용하는 거구나 라고 확인 정도 하셔도 됩니다.
이왕이면 실습을 해서 실행결과를 확인하다면 더 머리속에 오래 남을겁니다.

오라클 소계, 합계를 구하는 ROLLUP


 

ROLLUP 함수의 사용 방법은
ROLLUP(컬럼명)을 지정하면 해당 컬럼명으로 그룹화되어 남아있는 숫자컬럼의 값의 컬럼의 합계를 구해 새로운 ROW에 결과를 보여주는 함수 입니다.

그룹화되어 남아있는 숫자컬럼의 값의 컬럼의 합계를


그럼 확인해보도록 하겠습니다. TEST1란 테이블을 만들고 데이터를 입력했습니다.
함수를 사용하기 위해 어떤 데이터가 있는지 확인해보겠습니다.

SELECT *
  FROM TEST1 A
  ;

이름과 항목 그리고 점수값이 있는 컬럼3개가 있습니다.

TEST1란 테이블


이름별로 점수의 합계를 구해보겠습니다.
이름별로 점수의 합계를 SUM함수로 사용되어 합계값이 구해집니다.

SELECT COL1,SUM(COL3) AS TOTAL
  FROM TEST1 A
  GROUP BY COL1
  ;


 SUM함수로 사용되어 합계값이



 
 이제 점수의 총합계를 구해보겠습니다.
 실행되면 새로운 줄에 모든 사람의 점수의 총합계가 구해집니다.

SELECT COL1,SUM(COL3) AS TOTAL
  FROM TEST1 A
  GROUP BY ROLLUP(COL1) ;

점수의 총합계


 

이제 소계도 총합계와 함께 구해보겠습니다.
시행되면 이름과 항목별로 소계가 구해집니다.
두번재 나혼자를 보면 항목이 B,C를 가지고 총합이 33인 소계를 확인할수 있습니다.
소계가 중간에 추가되었어도 합계값은 소계값을 제외하고 나옵니다.

SELECT COL1,COL2,SUM(COL3)
  FROM TEST1 A
  GROUP BY ROLLUP(COL1,COL2)
  ;

합계값은 소계값을 제외하고


이제 컬럼이 2개 이상일 때 소계를 제회하고 합계를 내보겠습니다.
이 부분에서 많은 분들이 잘 안된다고 하시는데요.
컬럼이 2개 이상일 경우 총합계만 나오도록 하려면 HAVING 절과 GROUPING_ID 를 사용해야 합니다.


SELECT COL1,COL2,SUM(COL3) AS TOTAL
  FROM TEST1 A
  GROUP BY ROLLUP(COL1,COL2) HAVING
   GROUPING_ID(COL1,COL2) IN (0,3)
  ;

HAVING 절과 GROUPING_ID


나름 복잡한 쿼리를 간단하게 할 수 있는데요.
ROLLUP에 () 를 한번 더 묶으면 소계가 빠진 총합계가 구해집니다.

SELECT COL1,COL2,SUM(COL3) AS TOTAL
  FROM TEST1 A
  GROUP BY ROLLUP((COL1,COL2))
  ;


소계가 빠진 총합계가


NVL 함수를 사용해서 컬럼에 값을 지정할 수 있습니다.


SELECT NVL(COL1,'총합계')  AS COL1
      ,COL2,SUM(COL3)   AS TOTAL
  FROM TEST1 A
  GROUP BY ROLLUP((COL1,COL2))
  ;

NVL 함수를 사용해서

이상 오라클(Oracle) 소계, 합계를 구하는 ROLLUP 함수 사용 방법을 알아보았습니다.