특정 그룹의 합계를 구할때, 그 안에서 원하는 소그룹의 부분합계도 같이 보고 싶다면 편리하게 사용할 수 있다.

사용법 또한 GROUP BY에 추가로 간단하게 사용가능하다.

 

CUBE와의 차이는 다음글에서 알 수 있다.

 

다음 글 참고>

통계함수 CUBE() 사용하기

 

 

사용법>

기본의 그룹바이:

GROUP BY 컬럼1, 컬럼2

-->

ROLLUP 사용할 때:

GROUP BY ROLLUP (컬럼1, 컬럼2)

 

 

사용예>

학교에서 1학년(1반, 2반)과 2학년(1반, 2반) 각각의 인원 합과

1학년, 2학년과 전체의 인원수를 계산한다.

 

 

쿼리>

WITH TMP_TBL AS (
    SELECT 

        '1' AS SCH_GRADE, '이과' AS TYPE_CLASS, '1' AS SCH_CLASS, 10 AS STUDENT_NUM 

    FROM DUAL
    UNION ALL
    SELECT 

        '1' AS SCH_GRADE, '문과' AS TYPE_CLASS, '2' AS SCH_CLASS, 11 AS STUDENT_NUM 

    FROM DUAL
    UNION ALL
    SELECT 

        '2' AS SCH_GRADE, '이과' AS TYPE_CLASS, '1' AS SCH_CLASS, 20 AS STUDENT_NUM 

    FROM DUAL
    UNION ALL
    SELECT 
        '2' AS SCH_GRADE, '문과' AS TYPE_CLASS, '2' AS SCH_CLASS, 22 AS STUDENT_NUM 

    FROM DUAL
)

SELECT 
    SCH_GRADE || CASE WHEN SCH_GRADE IS NOT NULL THEN '학년' ELSE '전체' END AS 학년
    , SCH_CLASS || CASE WHEN SCH_CLASS IS NOT NULL THEN '반' END AS 반
    , SUM(STUDENT_NUM) || '명' AS 명
FROM TMP_TBL
    GROUP BY ROLLUP (SCH_GRADE, SCH_CLASS);

 

 

결과>

학년 반 명
1학년 1반 10명
1학년 2반 11명
1학년 21명
2학년 1반 20명
2학년 2반 22명
2학년 42명
전체 63명

 

 

출처>

오라클 공식 문서

https://docs.oracle.com/cd/F49540_01/DOC/server.815/a68003/rollup_c.htm

 

ROLLUP enables a SELECT statement to calculate multiple levels of subtotals across a specified group of dimensions. It also calculates a grand total. ROLLUP is a simple extension to the GROUP BY clause, so its syntax is extremely easy to use. The ROLLUP extension is highly efficient, adding minimal overhead to a query.

 

728x90

+ Recent posts