ROLLUP 함수는 GROUP BY 절에서 사용하는 함수로, ROLLUP 함수의 인자로 쓰인 컬럼들의 소계, 총계를 구할 수 있다.
ROLLUP함수를 쓰면
첫번째 인자(상품 ID)별 두번째 인자(월) + 첫번째 인자(상품 ID)별 두번째 인자(월)의 소계(SUBTOTAL) + 총계(GRAND TOTAL)
의 결과가 나온다.
ROLLUP 함수는 인자의 순서에도 영향을 받기 때문에, 순서가 바뀐다면 결과도 바뀌게 된다.
아까와는 반대로
첫번째 인자(월)별 두번째 인자(상품 ID) + 첫번째 인자(월)별 두번째 인자(상품ID)의 소계(SUBTOTAL) + 총계(GRAND TOTAL)
의 결과가 나온다.
이렇듯 ROLLUP 함수는 인자별 소계, 총계를 내기 때문에 아래의 쿼리에서는 전혀 다른 결과가 나오게 된다.
SELECT DEPTNO
, JOB
, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
SELECT DEPTNO
, JOB
, SUM(SAL)
FROM EMP
GROUP BY ROLLUP((DEPTNO, JOB));
GROUP BY ROLLUP 의 () 안에 들어온 컬럼을 오른쪽부터 하나씩 빼면서 그룹을 만들어 준다고 생각하면 된다.
처음 쿼리는
첫번째 인자(DEPTNO)별 두번째 인자(JOB)
+ 첫번째 인자(DEPTNO)별 두번째 인자(JOB)의 소계(SUBTOTAL)
+ 총계(GRAND TOTAL)
두번째 쿼리는 () 안에 ()가 하나 더 들어가서 (DEPTNO, JOB) 자체가 하나의 그룹이 되니까
(DEPNO, JOB) 그룹 => 인자하나 빠지면 그룹이 없음 => 전체에 대한 결과 출력
그래서 첫번째는 부서별 소계, 총계가 나오지만 두번째는 총계만 나오게 된다.
'데이터베이스 > oracle' 카테고리의 다른 글
[함수] 1 일 1 함수 : 그룹 내 순위를 매기는 함수(RANK, DENSE_RANK, ROW_NUMBER) (0) | 2024.11.26 |
---|---|
토드(Toad)에서 다른 스키마의 테이블로 데이터 복사하기 (0) | 2024.03.25 |
TRANSLATE 함수로 정규식같은 효과 내기 (0) | 2023.09.05 |
인덱스란? (1) | 2023.08.29 |