[SQL] 그룹 함수

2022. 3. 30. 01:09카테고리 없음

ROLLUP 함수

Grouping Columns의 수를 N이라고 했을 때 N + 1 Level의 Subtotal이 생성된다.

중요한 것은 ROLLUP의 인수는 계층 구조이므로 인수 순서가 바뀌면 수행 결과도 바뀌게 되므로 인수의 순서에도 주의해야 한다.

SELECT B.DNAME, A.JOB, COUNT(*) AS EMP_CNT, SUM(A.SAL) AS SAL_SUM
FROM EMP A, DEPT B
WHERE B.DEPTNO = A.DEPTNO
GROUP BY ROLLUP(B.DNAME, A.JOB);

CUBE 함수

ROLLUP에서는 단지 가능한 Subtotal만을 생성하지만, CUBE는 결합 가능한 모든 값에 대해 다차원 집계를 생성한다.

이로 인해 ROLLUP에 비해 시스템에 많은 부담을 주므로 사용에 주의해야한다.

 

GROUPING SETS 함수

GROUP BY SQL 문장을 여러 번 반복하지 않아도 원하는 결과를 쉽게 얻을 수 있게 한다.

GROUPING SETS에 표시된 인수들에 대한 개별 집계를 구할 수 있으며, 이때 표시된 인수 간에는 계층 구조인 ROLLUP과 달리 평등한 관계이므로 인수의 순서가 바뀌어도 결과는 같다.

 

ex) 부서-job-매니저별 집계, 부서- job별 집계, job-매니저별 집계를 GROUPING SETS함수를 이용해서 구한다.

SELECT B.DNAME, A.JOB, A.MGR, COUNT(*) AS EMP_CNT, SUM(A.SAL) AS SAL_SUM
FROM EMP A, DEPT B
WHERE B.DEPTNO = A.DEPTNO
GROUP BY GROUPING SETS((B.DNAME, A.JOB, A.MGR), (B.DNAME, A.JOB), (A.JOB, A.MGR));