[Oracle] 오라클 ROLLUP & CUBE 활용, GROUPING&GROUPING_ID함수

seeun·2021년 7월 26일
0

Oracle

목록 보기
2/2
post-thumbnail

💡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


응용문제를 풀어보면서 롤업함수를 사용해 컬럼들을 어떤 방식으로 묶어야 하는지 터득했다😊

profile
🤹‍♂️개발 기록 노트

0개의 댓글