Oracle의 ROLLUP 함수의 개념

아래와 같은 테이블이 있다고 할때 부서별 연봉(SAL) 소계와 전체 SAL 총계를 도출해 내고자 할때 사용할수 있는 함수가 ROLLUP 함수이다.
한마디로 말하면 GROUP BY로 묶을 칼럼의 소계를 도출하는 함수이다.

DEPT      |  RANK  |  SAL
--------------------------------
기획부    |  부장   | 3800
기획부    |  부장   | 4000
기획부    |  차장   | 1800
마케팅부 부장   | 4000
마케팅부 |  차장   | 2000
마케팅부 |  과장   | 1500

SELECT DEPT, RANK, COUNT(RANK) "RANK_COUNT", SUM(SAL) FROM TEST GROUP BY ROLLUP(DEPT, RANK);

위 쿼리가 의미하는 바는 DEPT와 RANK라는 두 칼럼의 데이터가 같은 튜플들을(row) 하나로 묶어(grouping) SAL의 합을 도출하고
DEPT 칼럼의 데이터가 같은 튜플들을 하나로 묶어 SAL의 소계를 도출하고 최종적으로는 전체 튜플들 모두의 합(총계)를 도출하는 기능을 하는 것이 ROLLUP() 함수이다.

DEPT    |  RANK  |  RANK_COUNT | SAL
------------------------------------------------------------------------------
기획부    |  부장  | 2                   | 7800 ==> 기획부, 부장의 합계
기획부    |  차장  | 1                   | 1800
기획부    |  (null) | 3                   | 9600 ==> 기획부 소계
마케팅부  과장  | 1                   | 1500
마케팅부  부장  | 1                   | 4000
마케팅부  차장  | 1                   | 2000
마케팅부  (null) | 3                   | 7500 ==> 마케팅부 소계
(null)         (null) | 6                   | 17100 ==> 전체 총계

 

+ Recent posts