본문 바로가기

dev/DB

그룹 함수



ROLLUP, GROUPING SETS, CUBE


1. ROLLUP

  • GROUP BY된 칼럼에 대해 소계를 만들어 준다. (컬럼별 집계 + 전체 집계, 즉 컬럼 N개면 N+1개 결과)
  • 칼럼 순서에 따라 결과가 다르게 나온다(순서 중요)
  • 하나의 칼럼을 기준으로 GROUP BY 된 경우 : 해당 컬럼을 기준으로 집계 + 전체 집계
  • 두 개 이상의 칼럼을 기준으로 GROUP BY된 경우 : 각 컬럼을 기준으로 집계 + 전체 집계
예시1) 하나의 칼럼을 기준으로 GROUP BY된 경우
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO);

예시2) 두개의 칼럼을 기준으로 GROUP BY된 경우
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);


예시3) 두 컬럼을 하나의 집합으로 묶은 경우

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



2. CUBE

  • CUBE 함수에 명시된 컬럼에 대해 결합 가능한 모든 집계를 계산(컬럼 N개면 결과 2^N개)
  • GROUP BY된 컬럼이 가질 수 있는 모든 경우의 수에 대한 소계를 생성한다.


3. GROUPING SETS

  • 칼럼 순서와 무관하게 결과가 나온다(순서 무관)
SELECT DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY GROUPING SETS(DEPTNO, JOB); // DEPTNO, JOB 별 합계를 각각 조회한다.
   // DEPTNO와 JOB의 순서가 바뀌어도 결과는 같다.


[TIP]

ROLLUP, CUBE, GROUPING SETS 결과 비교

SELECT DNAME,JOB, COUNT(*), SUM(SAL)

FROM EMP, DEPT

WHERE DEPT.DEPTNO = EMP.DEPTNO

GROUP BY _______(DNAME,JOB);

- ROLLUP



- CUBE


- GROUPING SETS



GROUPING 함수

  • ROLLUP, CUBE, GROUPING SETS에서 생성되는 합계 값을 구분하기 위해 사용 
  • ROLLUP, CUBE에 의해 소계가 계산된 결과에는 GROUPING(EXPR) = 1 이 표시된다.
  • 그 외의 결과에는 GROUPING(EXPR) = 0 이 표시된다.


'dev > DB' 카테고리의 다른 글

SQL 최적화(옵티마이저, 인덱스)  (0) 2019.03.10
window 함수  (0) 2019.03.10
SQL 표준 함수  (0) 2019.03.10
서브쿼리  (0) 2019.03.10
Join  (0) 2019.03.07