그룹 함수(Group Function) - ROLLUP, CUBE, GROUPING SETS, GROUPING
do-oni
2021. 7. 13.
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을 리턴