ROLLUP구문은 GROUP BY 절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진 집합 결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행 한다.
SELECT절에 ROLLUP을 사용함으로써 보통의 SELECT된 데이터와 그 데이터의 총계를 구할 수 있다.
-- 먼저 GROUP BY를 사용해서 직업별로 급여 합계를 구하는 예제이다. SQL> SELECT job, SUM(sal) FROM emp GROUP BY job; JOB SUM(SAL) ---------- ---------- ANALYST 600 CLERK 3200 MANAGER 33925 PRESIDENT 5000 SALESMAN 4000 -- ROLLUP을 사용해서 직업별로 급여 합계와 총계를 구하는 예제이다. SQL> SELECT job, SUM(sal) FROM emp GROUP BY ROLLUP(job); JOB SUM(SAL ---------- ---------- ANALYST 6000 CLERK 3200 MANAGER 33925 PRESIDENT 5000 SALESMAN 4000 52125 --> 급여 합계에 대한 총계가 추가 되었다.
부서별로 인원수와 급여 합계를 구하는 예제
-- GROUP BY절을 사용 한 결과 SQL> SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY b.dname, a.job DNAME JOB SAL EMP_COUNT ---------- ---------- ---------- ---------- ACCOUNTING CLERK 1300 1 ACCOUNTING MANAGER 2450 1 ACCOUNTING PRESIDENT 5000 1 RESEARCH ANALYST 6000 2 RESEARCH CLERK 1900 2 RESEARCH MANAGER 2975 1 SALES MANAGER 28500 1 SALES SALESMAN 4000 3 -- 부서별로 인원과, 급여합계가 한 눈에 보이지 않는다. -- 일일이 부서에 해당하는 직업별 급여와 사원수를 일일이 더해야 한다. -- 이런 경우 ROLLUP을 사용하여 쉽게 조회 할 수 있다. SQL> SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count FROM emp a, dept b WHERE a.deptno = b.deptno GROUP BY ROLLUP(b.dname, a.job) DNAME JOB SAL EMP_COUNT ---------- ---------- ---------- ---------- ACCOUNTING CLERK 1300 1 ACCOUNTING MANAGER 2450 1 ACCOUNTING PRESIDENT 5000 1 ACCOUNTING 8750 3 --> ACCOUNTING 부서의 급여 합계와 전체 사원 수 RESEARCH ANALYST 6000 2 RESEARCH CLERK 1900 2 RESEARCH MANAGER 2975 1 RESEARCH 10875 5 --> RESEARCH 부서의 급여 합계와 전체 사원 수 SALES MANAGER 28500 1 SALES SALESMAN 4000 3 SALES 32500 4 --> SALES부서의 급여 합계와 전체 사원 수 52125 12 -> 전체 급여 합계와 전체 사원 수 -- 위와 같이ROLLUP은 일반적인 누적에 대한 총계를 구할 때 아주 편리하게 사용 할 수 있다.
- 강좌 URL : http://www.gurubee.net/lecture/1845
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.