--ROLLUP 과 GROUPING을 이용하여 그룹지어진 소계와 합계를 출력해보자 SELECT DEPTNO ,EMPNO ,DECODE(GROUPING(DEPTNO),1,'합계',DECODE(GROUPING(EMPNO),1,'소계')) TOT ,SUM(SAL) S_SAL ,GROUPING(DEPTNO) GRP_DEPT ,GROUPING(EMPNO) GRP_EMP ,GROUPING_ID(DEPTNO, EMPNO) GID FROM EMP GROUP BY ROLLUP(DEPTNO, EMPNO);
결과
1. DECODE(GROUPING(DEPTNO),1,'합계',DECODE(GROUPING(EMPNO),1,'소계')) TOT DECODE를 이용하여 GROUPING(DEPTNO)이 1이면 '합계', DECODE(GROUPING(EMPNO)이 1이면 '소계'를 출력 2. GROUPING(DEPTNO) GRP_DEPT DEPTNO로 데이터가 그룹핑되었으면 0이고 DEPTNO에 값이 없으면 1을 반환 3. GROUPING(EMPNO) GRP_EMP EMPNO로 데이터가 그룹핑되었으면 0이고 EMPNO에 값이 없으면 1을 반환 4. GROUPING_ID(DEPTNO, EMPNO) GID DEPTNO, EMPNO에 그룹핑 되어 나온 값에 따라 2진수를 10진수로 반환 즉 DEPTNO 그룹 값이 1, EMPNO의 그룹값이 1이 나왔다고 하면 2진수 11 이것을 다시 10진수로 표현하면 3이된다 5. GROUP BY ROLLUP(DEPTNO, EMPNO); DEPTNO, EMPNO를 그룹지어 소계및 합계를 출력
728x90
반응형
'DB > Oracle' 카테고리의 다른 글
오라클 쿼리실행 시간 체크 (0) | 2018.02.15 |
---|---|
오라클 PIVOT/UNPIVOT (0) | 2018.02.15 |
오라클 NULL값 정렬 (NULLS FIRST, NULLS LAST) (0) | 2018.02.15 |
오라클 사용자 예외처리 사용 방법 (0) | 2018.02.15 |
oracle 열을 행으로 (, 구분) (0) | 2018.02.15 |