Rollup과 Cube는?
- - GROUP BY 구문의 결과에 소계 및 합계 정보를 추가로 나타내 주는 함수
- - 복잡한 과정 없이 간단한 구문만으로 소계 정보를 쉽게 구할 수 있다.
- - Rollup : 단계별 소계
- - Cube : 모든 경우의 수에 대한 소계
Rollup 기본예제
Rollup 예제 1
아래는 부서별 급여합계와 전체 합계를 조회하는 예제이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT deptno , SUM (sal) s_sal FROM emp GROUP BY ROLLUP (deptno) ; -- ROLLUP 연산으로 29025 출력 DEPTNO S_SAL ------- ---------- 10 8750 20 10875 30 9400 29025 |
분석: 순서대로 보기 바람.
SELECT
deptno
,
SUM
(sal) s_sal //1번 월급의 평균
FROM
emp
GROUP
BY
ROLLUP
(deptno)
; //deptno 전체를 구룹으로 묶어서 deptno와 s_sal을 한번더 출력해줌.아래는 UNION ALL을 이용하여 위 ROLLUP 예제와 동일한 결과를 조회하는 예제이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | SELECT deptno , SUM (sal) s_sal FROM emp GROUP BY deptno UNION ALL SELECT NULL deptno , SUM (sal) s_sal FROM emp ; DEPTNO S_SAL ------- ---------- 30 9400 20 10875 10 8750 29025 |
Rollup 예제 2
아래는 부서별 사원의 급여와 소계, 그리고 전체 합계(총계)를 조회하는 예제이다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | SELECT deptno , empno , SUM (sal) s_sal FROM emp GROUP BY ROLLUP (deptno, empno) ; DEPTNO EMPNO S_SAL ------- ---------- ---------- 10 7782 2450 10 7839 5000 10 7934 1300 10 8750 20 7369 800 20 7566 2975 20 7788 3000 20 7876 1100 20 7902 3000 20 10875 30 7900 950 30 7499 1600 30 7521 1250 30 7654 1250 30 7698 2850 30 7844 1500 30 9400 29025 |
분석:순서대로 보기 바람.
SELECT
deptno
, empno
,
SUM
(sal) s_sal
FROM
emp
GROUP
BY
ROLLUP
(deptno, empno) //1번 그룹을 하는데 deptno와 empno를 기준으로 함 결과는 s_sal로써. deptno를 기준으로 empno의 합을 구해서 출력해주고그담 deptno를 기준으로 전체의 합을 구해줌 ~
;
태그
문서에 대하여
- - 강좌 URL : http://www.gurubee.net/lecture/2678
- - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- - 구루비의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
--------------------------추가 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ROLLUP operator
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은 일반적인 누적에 대한 총계를 구할 때 아주 편리하게 사용 할 수 있다.
SELECT b.dname, a.job, SUM(a.sal) sal, COUNT(a.empno) emp_count FROM emp a, dept b
WHERE a.deptno = b.deptno //1번 부서끼리 조인시키고. GROUP BY ROLLUP(b.dname, a.job) //부서명과 직책별로 그룹후 rollup시키고 결과를 출력하는데 부서를 출력후 잡별로 인원카운팅을 하고 하합계도 구하고 부서의 잡의 총 급여와 인원수를 구해주고 최종적으로 전체 합계를 다시 결과로 알려줌.
태그
ROLLUP
문서에 대하여
- - 강좌 URL : http://www.gurubee.net/lecture/1845
- - 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- - 구루비의 모든 강좌는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
'Oracle' 카테고리의 다른 글
CUBE GROUP BY CUBE (0) | 2014.12.03 |
---|---|
GROUPING과 GROUPING_ID (0) | 2014.12.03 |
KEEP (0) | 2014.12.03 |
LAG, LEAD (다른 행의 값을 참조) (0) | 2014.12.03 |
윈도우 함수 WINDOWNING PRECEDING (0) | 2014.12.03 |