[DB/SQLD] 그룹 함수(Group Function)

1 분 소요

ROLLUP

ROLLUP 함수는 group by의 칼럼에 대해서 subtotal을 만들어 준다.

SELECT DECODE(DEPTNO, null, '전체합계', DEPTNO), SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO);

위 코드를 통해 GROUP BY 절로 DEPTNO에 대해서 급여합계를 계산하고 부서별 전체합계를 추가해서 계산했다. 즉 ROLLUP은 DEPTNO에 대해서 기존 GROUP BY와는 다르게 부서별 전체합계를 계산하게 된다.

DECODE문은 전체합계를 조회할 때 ‘전체합계’라는 문자를 출력하기 위해서 사용된다. DECODE문을 사용해 DEPTNO가 NULL과 같으면 ‘전체합계’라는 문자를 출력하고 그렇지 않으면 DEPTNO을 출력한다.

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);

위 코드는 부서별, 직업별 ROLLUP을 실행한 것이다. 결과는 부서별합계, 직업별합계, 전체합계가 모두 조회된다. ROLLUP으로 실행되는 칼럼별로 SUBTOTAL을 만든다.



GROUPING 함수

GROUPING함수는 ROLLUP, CUBE, GROUPING SETS에서 생성되는 합계값을 구분하기 위해서 만들어진 함수이다. 예를 들어 소계, 합계 등이 계산되면 GROUPING 함수는 1을 반환하고 그렇지 않으면 0을 반환해서 합계값을 식별할 수 있다.

SELECT DEPTNO, GROUPING(DEPTNO), JOB, GROUPING(JOB), SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);



GROUPING SETS 함수

GROUPING SETS 함수는 GROUP BY에 나오는 칼럼의 순서와 관계없이 다양한 소계를 만들 수 있다. GROUPING SETS 함수는 GROUP BY에 나오는 칼럼의 순서와 관계없이 개별적으로 모두 처리한다.

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS(DEPTNO, JOB);

위 코드를 실행하면 DEPTNO 합계와 JOB 합계가 개별적으로 조회된다. 두개에 대해서 각각의 그룹으로 합계를 계산, 즉 개별적으로 조회된다. 즉 서로 관계가 없다는 것이다.



CUBE 함수

CUBE는 CUBE함수에 제시한 칼럼에 대해서 결합 가능한 모든 집계를 계산한다. 다차원 집계를 제공해 다양하게 데이터를 분석할 수 있다. 예를 들어 부서와 직업을 CUBE로 사용하면 부서별 합계, 직업별 합계, 부서별 직업별 합계, 전체합계가 조회된다. 즉, 조합가능한 모든 경우의 수가 모두 조합된다.

SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY CUBE(DEPTNO, JOB);

위 코드는 CUBE로 부서코드와 직업을 실행했다. 그 결과 전체합계, 직업별합계, 부서별합계, 부서별 직업별합계가 조회됐다.