특정 그룹이 나누어져 있고, 소 그룹의 부분합계를 보고 싶다면 편리하게 사용할 수 있다.
사용 또한 GROUP BY에 추가로 간단하게 사용가능하다.
ROLLUP과의 차이는
학년별 학급을 구하는데 CUBE를 사용한다면 전체의 1반, 전체의 2반 합계는 의미가 없다.
하지만 전체의 학급유형(문과, 이과)별 집계는 의미가 있다.
따라서 여기서는 CUBE를 사용하는 것이 좋다.
이전 글 참고>
사용법>
기본의 그룹바이:
GROUP BY 컬럼1, 컬럼2
-->
CUBE 사용할 때:
GROUP BY CUBE (컬럼1, 컬럼2)
사용예>
학교에서 1학년(1반, 2반)과 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 학년
, TYPE_CLASS AS 학급유형
, SUM(STUDENT_NUM) || '명' AS 명
FROM TMP_TBL
GROUP BY CUBE (SCH_GRADE, TYPE_CLASS)
ORDER BY SCH_GRADE, TYPE_CLASS;
결과>
학년 학급유형 명
1학년 문과 11명
1학년 이과 10명
1학년 21명
2학년 문과 22명
2학년 이과 20명
2학년 42명
전체 문과 33명
전체 이과 30명
전체 63명
출처>
오라클 공식 문서
https://docs.oracle.com/cd/F49540_01/DOC/server.815/a68003/rollup_c.htm
CUBE enables a SELECT statement to calculate subtotals for all possible combinations of a group of dimensions. It also calculates a grand total. This is the set of information typically needed for all cross-tabular reports, so CUBE can calculate a cross-tabular report with a single SELECT statement. Like ROLLUP, CUBE is a simple extension to the GROUP BY clause, and its syntax is also easy to learn.
'Software > Oracle' 카테고리의 다른 글
[Oracle] 입력한 날짜에 해당하는 마지막날 구하기, LAST_DAY() - 조건절(where)에 활용하기 (0) | 2020.07.11 |
---|---|
[Oracle] sqlplus 화면 지우기 clear - 유저 확인, 오라클 버전 확인 (1) | 2020.07.07 |
[Oracle] 통계함수 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 |