DataBase/Oracle

SQL - ROLLUP, CUBE, GROUPING, GROUPING SETS

jddng 2022. 1. 20. 01:26
728x90
반응형

 

ROLLOUP 함수

 

  • 그룹별 산출한 결과값의 집계를 계산하는 함수
  • GROUP BY 절에서만 사용한다
  • 인자로 전달받은 그룹 중에 가장 먼저 지정한 그룹별 합계와 총 합계를 구한다.

 

 

 

 

 

CUBE 함수

  • 그룹별 산출한 결과값의 집계를 계산하는 함수
  • GROUP BY 절에서만 사용한다
  • 그룹으로 지정된 모든 그룹에 대한 합계와 총 합계를 구한다.

 

 

 

 

GROUPING 함수

  • ROLLUP이나 CUBE에 의한 집계 산출물이 인자로 전달받은 컬럼 집합의 산출물이면 0을 반환하고,아니면 1을 반환하는 함수이다
SELECT
       DEPT_CODE
     , JOB_CODE
     , SUM(SALARY)
     , CASE
         WHEN GROUPING(DEPT_CODE) = 0 AND GROUPING(JOB_CODE) = 1 THEN '부서별합계'
         WHEN GROUPING(DEPT_CODE) = 1 AND GROUPING(JOB_CODE) = 0 THEN '직급별합계'
         WHEN GROUPING(DEPT_CODE) = 0 AND GROUPING(JOB_CODE) = 0 THEN '그룹별합계'
         ELSE '총합계'
       END 구분
  FROM EMPLOYEE
 GROUP BY CUBE(DEPT_CODE, JOB_CODE)
 ORDER BY 1;

 

 

 

GROUPING SETS함수

  • 그룹별로 처리된 여러 개의 SELECT문을 하나로 합친 결과를 원할 때 사용한다.
  • SET OPERATOR(집합연산자) 사용한 결과와 동일한 결과를 얻을 수 있다.
SELECT
       DEPT_CODE
     , JOB_CODE
     , MANAGER_ID
     , FLOOR(AVG(SALARY))
  FROM EMPLOYEE
 GROUP BY GROUPING SETS((DEPT_CODE, JOB_CODE, MANAGER_ID)
                      , (DEPT_CODE, MANAGER_ID)
                      , (JOB_CODE, MANAGER_ID)
                       );

 

 

 

728x90
반응형