[Oracle] 오라클 ROLLUP & CUBE 활용, GROUPING&GROUPING_ID함수
💡GROUP BY
부서별, 직업별로 합계 조회 (부서 10번 CLERK의 급여의 합은 1300)
여기서 부서별로 합계를 조회하거나 전체 합계를 조회하고 싶다면 ROLLUP함수 사용하기
💡ROLLUP
부서와 직업별 합계, 부서별 합계, 전체 합계가 같이 출력되었다.(DEPTNO,JOB) (DEPTNO, NULL) (NULL,NULL) 이런식으로 그룹핑되어 출력되었다.
만약 세개의 컬럼이라면? 즉 ROLLUP(A,B,C)라면
(A,B,C) (A,B,NULL) (A,NULL,NULL), (NULL,NULL,NULL) 으로 그룹핑되어 조회된다
💡CUBE
부서와 직업별 합계, 부서별 합계, 직업별 합계, 전체 합계가 같이 출력되었다.
(DEPTNO,JOB) (DEPTNO, NULL) (NULL,JOB) (NULL,NULL) 이렇게 그룹핑!
만약 CUBE(A,B,C)라면
(A,B,C)
(A,B,NULL) (A,NULL,C) (NULL,B,C)
(A,NULL,NULL) (NULL,B,NULL) (NULL,NULL,C)
(NULL,NULL,NULL) 으로 그룹핑되어 조회된다.
💡GROUPING
ROLLUP과 같이 사용하는 GROUPING 함수는 ROLLUP 연산 후에 컬럼이 NULL값이면 1을 반환한다.
💡GROUPING_ID
GROUPING_ID 함수는 인자로 들어온 컬럼의 GROUPING 함수 값인 2진수 값을 10진수로 변환한 값을 반환해준다.
즉 13번 줄에서 (2 * 1) + (1 * 1) = 3 이다
👩🏾💻 응용문제
✏️ EMP 테이블의 급여의 합과, 평균을 다음과 같이 출력하시오.
COMPUTE |
---|
29025 |
2073.21429 |
✏️ EMP 테이블을 활용해서 30번 부서에서 근무하는 사원 정보를 검색하면서, 급여 합계와 평균을 다 음과 같이 출력 하시오.
DEPTNO EMPNO ENAME SAL
---------- ---------- ---------- ----------
30 7900 JAMES 950
30 7499 ALLEN 1600
30 7521 WARD 1250
30 7654 MARTIN 1250
30 7698 BLAKE 2850
30 7844 TURNER 1500
9400 -> 급여 합
1566.67 -> 급여 평균
✏️ EMP 테이블의 사원 정보를 검색하면서 각 부서별 급여 합계와 평균, 전체 급여 합계와 평균을 다음과 같이 검색하시오.
DEPTNO EMPNO ENAME SAL
---------- ---------- ---------- ----------
10 7782 CLARK 2450
10 7839 KING 5000
10 7934 MILLER 1300
10 DEPT_SUM 8750
10 DEPT_AVG 2916.7
20 7369 SMITH 800
20 7566 JONES 2975
20 7788 SCOTT 3000
20 7876 ADAMS 1100
20 7902 FORD 3000
20 DEPT_SUM 10875
20 DEPT_AVG 2175
30 7900 JAMES 950
30 7499 ALLEN 1600
30 7521 WARD 1250
30 7654 MARTIN 1250
30 7698 BLAKE 2850
30 7844 TURNER 1500
30 DEPT_SUM 9400
30 DEPT_AVG 1566.7
TOTAL_SUM 29025
TOTAL_AVG 2073.2
응용문제를 풀어보면서 롤업함수를 사용해 컬럼들을 어떤 방식으로 묶어야 하는지 터득했다😊
Author And Source
이 문제에 관하여([Oracle] 오라클 ROLLUP & CUBE 활용, GROUPING&GROUPING_ID함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sennys2/Oracle-오라클-ROLLUP-CUBE-활용-GROUPING-GROUPINGID함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)