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
반응형