본문 바로가기

데이터베이스

[데이터베이스] ROLLUP()

		 SELECT DEPTNO , SUM(SAL) 
 	 	 FROM EMP e 
 GROUP BY DEPTNO;

GROUP BY로 그룹을 지어 그룹마다 집계함수를 적용 시킬 수 있다. 위의 상황에서 그룹 별 SAL 뿐만 아니라 전체 

SAL을 구하고 싶다면 사용하는 것이 ROLLUP()이다.

 

ROLLUP 사용법

	 SELECT DECODE(DEPTNO, NULL, '전체합계', DEPTNO) , SUM(SAL) 
 	 FROM EMP  
 GROUP BY ROLLUP(DEPTNO) ;

위와 같이 사용하면 DEPTNO 별로 구룹을 지은 다음 그룹별로  SUM() 집계함수를 적용 시킨다. 모든 그룹에 적용 시켰다면 마지막에 DEPTNO는 NULL로 전체 집게를 구한다. 

 

그렇다면 ROLLUP() 에 인자를 2개를 주면 어떻게 될까?

	 SELECT  DECODE(DEPTNO, NULL, '부서 전체합계', DEPTNO) , 
 			DECODE(JOB, NULL, '직업 전체합계', JOB),			
	 		SUM(SAL)		 		
 	 	FROM EMP  
 GROUP BY ROLLUP(DEPTNO, JOB) ;

결과는 위와 같이 나왔다. 이것이 의미하는 것은 부서번호와 직업이름을 하나의 그룹으로 본다는 것이다. 이렇게 부서별 직업에 대한 집계를 각 각 낸다음에 부서의 직업전제합계에 대한 집계를 내고 맨 마지막에 부서 전체합계를 내는 방식으로 실행이 된다. 

 

인자로 오는 첫번째 컬럼과 두번째 컬럼을 그룹지어서 집계 후 첫번째 컬럼에 대한 집계, 다시 다음행에서 이를 반복하고 마지막에 전체집계 순으로 된다.