ROLLUP
설명보다 코드와 결과값부터 보겠다.
코드 자체는 어려움이 없다. GROUP BY 옆에 ROLLUP을 적고 ()안에 해당 열을 입력해주면 된다,
ROLLUP 함수는 안에 입력한 열들을 소그룹부터 대그룹 순으로 각 그룹별 결과를 출력하고 마지막에 총 데이터 결과를 출력해준다.
ROLLUP(DEPTNO, JOB)과 ROLLUP(JOB, DEPTNO)의 차이는 위의 결과값을 비교해 보자.
CUBE
CUBE 함수는 ROLLUP 함수와 비슷하다. 차이점은 명시하는 열의 N 개수에 따라 N^2개의 모든 조합을 출력한다는 것이다. 즉, CUBE(A,B,C)일 경우
1. A,B,C 해당하는 결과 출력
2. A, B 그룹의 결과 출력
3. B, C 그룹의 결과 출력
4. A, C 그룹의 결과 출력
5. A 결과 출력
6. B 결과 출력
7. C 결과 출력
8. 전체 데이터 결과 출력
라는 결과값이 나온다.
GROUPING SETS
이 함수는 ROLLUP과 CUBE 함수처럼 열을 계층적으로 그룹화하지 않고 지정한 모든 열을 각각 대그룹으로 만들어 출력한다. 아래의 코드를 보면 이해하기 쉬울것이다.
위에 보이는 것처럼 DEPTNO, JOB은 각각 대그룹으로 처리되서 데이터가 집계되었다.
DEPTO
GROUPING & GROUPING ID
GROUPING과 GROUPING ID는 GROUP BY 절에서 ROLLUP 혹은 CUBE 함수를 사용한 대상이 그룹화된 상태로 결과가 출력되었는지 확인해주는 함수입나다.
맨 오른쪽 두개의 열을 보면 0과 1을 읽을 수 있다. 0의 의미는 해당 그룹핑된 열이 그룹화되었다는 의미이고 1은 그 반대이다.
4번째 줄을 보면 직업과 무관하게 10 부서 전체를 기준으로 도출된 결과값을 다루고 있어 GROUPING(JOB)의 값이 1이다.