으나님의 잡다한 개발상식
(SQL) 그룹함수(ROLLUP, GROUPING, GROUPING SETS, CUBE) 본문
1) ROLLUP
- GROUP BY 컬럼에 대하여 SUBTOTAL을 만드는 함수
- ROLLUP을 할 때 GROUP BY 구에 컬럼이 두 개 이상 오면 순서에 따라서 결과가 달라짐
- GROUPING COLUMN 수를 N이라고 했을 때 N+1 LEVEL의 SUBTOTAL이 생성됨
2) GROUPING
- ROLLUP, CUBE, GROUPING SETS에서 생성되는 합계값을 구분하기 위해 만들어진 함수
- 소계, 합계 등이 계산되면 GROUPING 함수는 1을 반환하고, 그렇지 않으면 0을 반환해서 합계 값을 식별할 수 있음
3) GROUPING SETS
- GROUPING SETS 함수는 GROUP BY에 나오는 컬럼의 순서와 관계없이 다양한 소계를 만들 수 있으며, 개별적으로 모두 처리함
- UNION ALL을 사용한 일반 그룹함수를 사용한 SQL과 같은 결과를 얻을 수 있음
SELECT DNAME, JOB, MGR, SUM(SAL) TOTAL_SAL
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY GROUPING SETS((DNAME,JOB,MGR), (DNAME,JOB), (JOB,MGR))/*UNION ALL한 것과 같음*/;
4) CUBE
- CUBE 함수에 제시한 컬럼에 대해서 결합 가능한 모든 집계를 계산
- 다차원 집계를 제공하여 다양하게 데이터 분석이 가능
- 시스템에 많은 부하를 일으킴
1열은 전체합계, 2~12열은 직업별 합계, 13, 17, 21, 27열은 부서별 합계, 나머지는 부서별/직업별 합계이다.
'SQL' 카테고리의 다른 글
(SQL) WINDOW 함수 - RANK(순위함수) (0) | 2020.05.28 |
---|---|
(SQL) WINDOW함수 (0) | 2020.05.28 |
(SQL) 서브쿼리 종류 (2) | 2020.05.27 |
(SQL) 다중 행 SUBQUERY 비교 연산자 (0) | 2020.05.27 |
(SQL) 계층형 조회 (0) | 2020.05.27 |