ORACLE - ROLLUP

이호준·2022년 10월 10일
0

ORACLE

목록 보기
4/4
post-thumbnail

ROLLUP에 대해..

GROUP BY

- 부서별, 직업별 급여의 합

SELECT
    DEPTNO
    ,JOB
    ,SUM(SAL)
FROM EMP
GROUP BY DEPTNO, JOB;

ROLLUP

  • 부서별, 직업별, 급여의 합, 부서별 급여의 합
SELECT
    DEPTNO
    ,JOB
    ,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);


TIP>> 전체 급여의 합만 보여주고 싶거나, 부서별로 합만 보여주고 싶을 땐??

SELECT
    DEPTNO
    ,JOB
    ,SUM(SAL)
FROM EMP
GROUP BY ROLLUP((DEPTNO, JOB));

  • 부서별 급여 합만 출력
SELECT
    DEPTNO
    ,JOB
    ,SUM(SAL)
FROM EMP
GROUP BY DEPTNO, ROLLUP(JOB);

ROLLUP의 원리

  • 각 번호는 해당 칼럼으로 GROUP BY를 한 결과

  • 첫번째 GROUP BY절 같은 경우는 총 4개의 GROUP

    1. ROLLUP의 인자로 들어온 칼럼을 오른쪽부터 하나씩 빼면서 GROUP을 만듭니다.
    2. "()"의 의미는 GROUP이 없는 즉, 전체에 대한 결과를 출력한다는 뜻 입니다. EX(SUM 함수 사용하면 전체 SUM 구한다는 뜻)
    3. 괄호로 묶여져 있는 컬럼은 하나로 본다는 뜻 입니다.
    4. ROLLUP 이전에 일반 컬럼과 GROUP BY 한다면, 일반 컬럼은 끝까지 남습니다.
  • GROUP BY ROLLUP(A, B, C) 예시

SELECT
    DEPTNO
    ,JOB
    ,ENAME
    ,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO,JOB,ENAME);

  • GROUP BY ROLLUP(A, (B, C)) 예시
SELECT
    DEPTNO
    ,JOB
    ,ENAME
    ,SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO,(JOB,ENAME));

  • GROUP BY A, ROLLUP((B, C)) 예시
SELECT
    DEPTNO
    ,JOB
    ,ENAME
    ,SUM(SAL)
FROM EMP
GROUP BY DEPTNO,ROLLUP((JOB,ENAME));

ROLLUP 함수를 사용하는 이유

ROLLUP이라는 뜻은 말아올리다라는 뜻으로, 분류된걸 말아서 몰두 합계를 낸다.
예를 들어, 'GROUP BY 성별' 성별 기준으로 묶어서, 남자 총 몇명, 여자 총 몇명 알려준다면....
ROLLUP 함수는 남자 총 몇명, 여자 총 몇명 그룹된 데이터 뿐만아니라 이둘을 더해 모두 몇명 이런식으로 분류전체 그룹된 개수를 보여줌. GROUP BY 함수와 같이 사용

--> ROLLUP 함수는 인수의 순서에도 영향을 받게 된다.
--> ROLLUP은 일반적인 누적에 대한 총계를 구할 때 아주 편리하게 사용 할 수 있다.

CUBE 함수

  • CUBE란 인자로 지정된 그룹들로 가능한 모든 조합 별로 집계한 결과 반환한다.
    즉, ROLLUP + 그룹으로 지정된 모든 그룹에 대한 집계 결과를 추가한다.
SELECT DEPT_CODE, JOB_CODE, SUM(SALARY)
FROM EMPLOYEE
GROUP BY CUBE(DEPT_CODE, JOB_CODE)
ORDER BY 1;

--> CUBE 함수는 인자의 순서의 상관없이 사용
--> 보통 CUBE는 Cross-Tab에 대한 Summary를 추출하는데 사용 된다

GROUPING SETS 함수

SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY GROUPING SETS(상품ID, 월);


첫번째 인자(상품ID)별 소계(SUBTOTAL), 두번째 인자(월)별 소계(SUBTOTAL)이 나오는 것을 확인할 수 있다.
ROLLUP과 CUBE와 달리 계층 구조가 나타나지 않으며 따라서 인자의 순서가 달라도 결과는 똑같다.

또한, GROUPING SETS 함수는 괄호로 묶은 집합별로도 집계를 구할 수 있다.

SELECT 상품ID, 월, 회사, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY GROUPING SETS((상품ID, 월), 회사);

profile
백엔드/ 개발자

0개의 댓글

관련 채용 정보