Oracle GROUPING 설명 : 오라클 함수
1. 함수의 목적
Oracle GROUPING은GROUP BY의 확장형태인 ROLLUP과 CUBE등은 모든 값의 집합이 NULL로 표시되는 SUPERAGGREGATE행을 표시하는데, SUPERAGGREGATE행인지 아니면 일반 GROUP BY에 의한 행인지 구분할 수 있도록 한다.
2. 샘플을 통한 개념 퀵뷰
GROUPING() 함수의 결과값이 1이면 SUPERAGGREGATE행이다.
이러한 SUPERAGGREGATE값을 가지고 모든 값의 집합인 ALL DEPARTMENTS로 표시하도록 DECODE문을 사용했다.
ALL Jobs 마찬가지 원리로 구현했다.
SELECT
DECODE(GROUPING(department_name), 1, 'ALL DEPARTMENTS', department_name)
AS department,
DECODE(GROUPING(job_id), 1, 'All Jobs', job_id) AS job,
COUNT(*) "Total Empl",
AVG(salary) * 12 "Average Sal"
FROM employees e, departments d
WHERE d.department_id = e.department_id
GROUP BY ROLLUP (department_name, job_id)
ORDER BY department, job;
3. 사용방법
4. 함수 PARAMETER 설명
[expr]
평가할 컬럼을 입력하는 파라미터이다.
GROUP BY의 컬럼과 반드시 일치해야 한다.
반환값이 1이라면 SUPERAGGREGATE 컬럼이란 뜻이고, 0이라면 일반 GROUP BY에 의해 생성된 ROW라고 본다.
반환값은 숫자형이다.
5. 다양한 샘플표현