특정 그룹의 합계를 구할때, 그 안에서 원하는 소그룹의 부분합계도 같이 보고 싶다면 편리하게 사용할 수 있다.
사용법 또한 GROUP BY에 추가로 간단하게 사용가능하다.
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.
'Software > Oracle' 카테고리의 다른 글
[Oracle] sqlplus 화면 지우기 clear - 유저 확인, 오라클 버전 확인 (1) | 2020.07.07 |
---|---|
[Oracle] 통계함수 CUBE() 사용하기 - ROLLUP()과의 차이 (0) | 2020.06.19 |
[Oracle] 오류 보고 - ORA-01790: expression must have same datatype as corresponding expression (0) | 2020.05.27 |
[Oracle] (정규식) LIKE 대신 REGEXP_LIKE() 정규식이 필요할 때 - 유저의 모든테이블, 컬럼 검색, 특정테이블 제외 (0) | 2020.03.27 |
[Oracle] 테이블 생성 후 Primary Key 추가, Sequence 생성 Oracle 11g R2 (0) | 2020.03.10 |