◈ ROLLUP operator
- ROLLUP구문은 GROUP BY절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진
집합결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행합니다.
- SELECT절에 ROLLUP을 사용함으로써 보통의 select된 데이터와 그 데이터의
총계를 구할 수 있습니다.
※ 우선 아주 간단한 예제부터 살펴 보겠습니다.
(scott유저의 emp테이블을 가지고 테스트 했습니다.)
-- Group By를 사용해서 직업별로 급여 합계를 구하는 예제 입니다.
SELECT job, SUM(sal)
FROM emp
GROUP BY job
JOB SUM(SAL)
---------- ----------
ANALYST 600
CLERK 3200
MANAGER 33925
PRESIDENT 5000
SALESMAN 4000
-- 아래 SQL문은 위의 예제에 ROLLUP구문을 사용해서 직업별로 급여 합계를 구하고
총계를 구하는 예제 입니다.
SELECT job, SUM(sal)
FROM emp
GROUP BY ROLLUP
JOB SUM(SAL
---------- ----------
ANALYST 6000
CLERK 3200
MANAGER 33925
PRESIDENT 5000
SALESMAN 4000
52125 --> 급여 합계에 대한 총계가 추가 되었습니다.
(job)
|
우선 간단하게 ROLLUP Operator의 예제를 살펴보았습니다.
조금더 복잡한(?) 예제를 하나더 해보면은요..
-- 부서의 직업별로 인원수와 급여 합계를 구하는 예제를 하나더 해보겠습니다.
-- 일반적인 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 Operator를 적용해서 구현을 하면은 부서별 급여합계와 사원 총수를
쉽게 볼 수 있습니다...
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 Operator을 일반적인 누적에 대한 총계를 구할때 사용하면 아주 편리하게
사용 할 수 있습니다.
|
|