쌓고 쌓다
[Oracle] ROLLUP, CUBE, GROUPING 본문
ROLLUP 예제
1) 소속 학과별로 교수 급여 합계와 모든 학과 교수들의 합계를 출력
SELECT deptno, SUM(sal)
FROM professor
GROUP BY ROLLUP(deptno) ORDER BY deptno;
ROLLUP(deptno)의 결과
1. (deptno)
2. 전체 합계
2) 학과 및 직급별 교수 수, 학과별 교수 수, 전체 교수 수를 출력하라
SELECT deptno, position, COUNT(*)
FROM professor
GROUP BY ROLLUP(deptno, position) ORDER BY deptno;
ROLLUP(deptno, position)의 결과
1. (deptno, position)
2. (deptno)
3. 전체 합계
ROLLUP(A, B, C)라고 하면 아래의 순서로 결과가 나온다.
1. (A, B, C)
2. (A, B)
3. (A)
4. 전체 합계
=> 규칙이 있다.
CUBE 예제
1) 학과 및 직급별 교수 수, 학과별 교수 수, 직급별 교수 수, 전체 교수 수를 출력
SELECT deptno, position, COUNT(*)
FROM professor
GROUP BY CUBE(deptno, position) ORDER BY deptno;
CUBE(deptno, position)의 결과
(1) (deptno, position)
(2) (deptno)
(3) (position)
(4) 전체 교수 수
GROUPING 함수
인수로 지정된 칼럼이 ROLLUP이나 CUBE 연산자, 그룹 함수에 사용되었는지 여부를 반환
( 사용:0, 미사용:1 )
1) 학과와 학년별 인원수, 학과별 인원수를 출력해서 각 그룹에 학과, 학년 칼럼이 사용 여부를 확인해보자.
SELECT deptno, grade, COUNT(*), GROUPING(deptno), GROUPING(grade)
FROM student
GROUP BY ROLLUP(deptno, grade) ORDER BY deptno;
1번, 3번, 5번, - 학과, 학년별 인원수를 구할 때 deptno, grade가 모두 사용되었다.
2번, 4번, 6번 - 학과별 인원수를 구할 때 학과(deptno)만 사용되었다.
7번 - 전체 인원수를 구할때 deptno, grade는 사용되지 않았다.
'프로그래밍 > SQL' 카테고리의 다른 글
[Oracle] HAVING (0) | 2022.10.31 |
---|---|
[Oracle] GROUPING SETS (0) | 2022.10.31 |
[Oracle] GROUP BY(그룹핑), 그룹 함수 (0) | 2022.10.20 |
[Oracle] DECODE, CASE 함수 (0) | 2022.10.08 |
[Oracle] NVL, NVL2, NULLIF, COALESCE (0) | 2022.10.08 |
Comments