본문 바로가기

DB/OracleSQL

그룹 함수(Group Function) - ROLLUP, CUBE, GROUPING SETS, GROUPING

07.09 TIL

 

ROLLUP

ROLLUP
GROUP BY절의 컬럼들을 오른쪽에서 왼쪽의 차례로 그룹들을 생성하고, 각 그룹에 계산함수를 적용
조회된 group list에서 소그룹간의 소계(Subtotal)를 계산
Grouping Column의 수를 N이라고 했을 때 N+1 Level의 Subtotal이 생성됨

 

컬럼의 수가 2개일때, 3개일때
컬럼의 수만큼 2의 N승

CUBE
GROUP BY절에 있는 모든 컬럼들에 대한 가능한 모든 조합을 그룹으로 생성
ROLLUP에 비해 시스템 부하를 많이 준다는 단점이 있다.
내부적으로 Grouping Columns의 순서를 바꾸어 또 한 번의 쿼리를 추가 수행해야 함, 함수의 인수 순서는 상관X
Grouping Column의 수를 N이라고 했을 때, 2의 N승 Level의 Subtotal이 생성됨

 

grouping sets 예제
(job,mgr)를 묶은 그룹과 (job,deptno)를 묶은 그룹 생성

GROUPING SETS
GROUPING SETS()에 명시된 컬럼들에 대한 개별 집계를 구함
계층 구조인 ROLLUP과 달리 평등한 관계이므로 순서는 상관X
시스템 부하가 적다.
정렬이 필요한 경우, ORDER BY절에 정렬 칼럼을 명시

 

grouping 예제

GROUPING
ROLLUP, CUBE, GROUPING SETS에 모두 사용 가능
각 결과 행이 CUBE, ROLLUP 연산자들에 의해 계산된 것인지를 알기 위해 사용
여러 컬럼을 지정할 수 있고 컬럼의 순서대로 해당 컬럼에 대해 계산되었다면 0, 그렇지 않다면 (null값) 1을 반환
GROUP BY절에 나타나는 컬럼에 적용

grouping_id 예제

GROUPING_ID
GROUPING 함수는 null 여부만 체크해서 0과 1을 리턴하지만,
GROUPING_ID 함수는 GROUPING LEVEL을 리턴

 

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

Quiz2 - ADSQL  (0) 2021.07.13
집합 연산자  (0) 2021.07.13
복습문제 - 서브쿼리  (0) 2021.07.13
서브쿼리(Subquery)  (0) 2021.07.13
복습문제 - 조인(JOIN)문  (0) 2021.07.13