[Oracle] 오라클 ROLLUP 함수 사용법 (소계, 합계)
- 데이터베이스/오라클
- 2015. 3. 22.
오라클 GROUP BY 쿼리에서 ROLLUP 함수를 사용하면 손쉽게 합계와 소계를 구할 수 있습니다. ROLLUP 함수는 다차원 집계를 생성하여, 그룹별 합계뿐만 아니라 전체 합계까지 한 번에 계산할 수 있습니다. 특히, 소계 또는 합계를 함께 조회해서 데이터를 반환할 수 있기때문에 통계 작업 쿼리를 만들때 아주 유용하다.
1. GROUP BY 컬럼이 하나인 경우
- GROUP BY 절에 ROLLUP 함수를 추가한 후 그룹핑 컴럼을 인자로 넣는다
SELECT job
, SUM(sal)
FROM emp
GROUP BY ROLLUP(job)
2. GROUP BY 컬럼이 두 개 이상인 경우
- 합계 및 소계 까지 계산되어 표시된다
SELECT job
, deptno
, SUM(sal)
FROM emp
GROUP BY ROLLUP(job, deptno)
3. GROUP BY 컬럼이 두 개 이상인 경우 합계만 표시하고 싶을 때
- HAVING 절에 GROUPING_ID 함수를 이용하여 소계 값을 제외할 수 있다
SELECT job
, deptno
, SUM(sal)
FROM emp
GROUP BY ROLLUP(job, deptno)
HAVING GROUPING_ID(job, deptno) IN (0, 3)
[Oracle] 오라클 GROUPING, GROUPING_ID 함수 사용법 |
4. ROLLUP 컬럼에 합계 표시하기
- DECODE 함수와 GROUPING 함수를 이용하여 합계 컬럼 값을 합계로 표시할 수 있다
- GROUPING 함수는 합계, 소계 행의 컬럼인 경우 1을 반환하고 그 외는 0을 반환한다.
SELECT DECODE(GROUPING(job), 1, '합계', job) AS job
, deptno
, SUM(sal) AS sal
FROM emp
GROUP BY ROLLUP(job, deptno)
HAVING GROUPING_ID(job, deptno) IN (0, 3)
다른 방법의 소계, 합계 구하는 방법은 아래를 참고하면 된다.