Without haste, but without rest
6.3. ROLLUP 본문
ROLLUP operator
- GROUP BY 절과 같이 사용
- GROUP BY절에 의해서 지어진 집합 결과에 대해 좀 더 상세한 정보 반환
간단 예제
-- 먼저 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은 일반적인 누적에 대한 총계를 구할 때 아주 편리하게 사용 할 수 있다.