2009. 3. 14. 03:10 Program.../Oracle
Oracle rollup, cube 함수
---- rollup, cube 함수
select deptno, job, sum(sal)
from emp
group by deptno, job; -- group by 1차,2차
select deptno, sum(sal)
from EMP
group by rollup(deptno); -- rollup() : 요약값, 그룹지어진것의 합을 구한다.
select deptno, job, sum(sal)
from emp
group by rollup(deptno, job); -- 직종에 상관없이 부서별 합계가 나오고, 부서번호&직종에 상관없이 전체합이 나온다.
select deptno, sum(sal)
from EMP
group by cube(deptno);
select deptno, job, sum(sal)
from emp -- cube() : rollup과 동일하나 추가로 2차 컬럼의 종류별 합계도 나온다.
group by cube(deptno, job); -- cube는 2차그룹이 있을때 더 효율적이다.
/* sys로 접속해서 실행 */
--////// rollup을 사용할때 그룹할 column에 null이 존재하면 결과값중에 실값과 요약값이 구분하기 힘들다.
--////// 이럴때 grouping 을 쓰면 구분하기가 좋다.
--////// grouping의 값이 0이면 실값이고, 1이면 요약값이다.
select department_id, grouping(department_id), sum(salary)
from hr.employees
group by rollup(department_id);
select case grouping(department_id)
when 1 then '전체부서' -- 해당 컬럼데이터가 숫자이면 숫자만 가능하나 문자로 입력하려면
else to_char(department_id) -- 해당컬럼값을 문자로 바꾸면 문자 출력이 가능하다.
end as "부서번호",
sum(salary) as "급여합"
from hr.employees
group by rollup(department_id);
'Program... > Oracle' 카테고리의 다른 글
Oracle 다중 테이블로부터의 데이타 검색 (0) | 2009.03.14 |
---|---|
Oracle All 함수 (0) | 2009.03.14 |
Oracle Having 절 (0) | 2009.03.14 |
Oracle Group by 절 (0) | 2009.03.14 |
Oracle 단일행 함수와 그룹함수의 차이점 (0) | 2009.03.14 |