문법 |
목적 |
GROUPING함수는 ROLLUP이나 CUBE 연산자와 함께 사용하여 GROUPING 함수에 기술된
컬럼이 그룹핑 시 즉, ROLLUP이나 CUBE 연산시 사용이 되었는지를 보여 주는 함수이다.
특별히 연산 기능은 없으며 ROLLUP이나 CUBE 연산 후 출력된 결과에 대한 사용자의 이해를 높이기 위해 사용된다.
즉, GROUPING 함수를 이용할 경우 출력되는 결과값 중 NULL값이 있다면 이 NULL값이 ROLLUP이나 CUBE 연산의 결과로 생성된
것인지, 원래 테이블상에 NULL값으로 저장된 것인지를 확인할 수 있다.
GROUPING함수는 규칙적인 그룹화된 행에서부터 superaggregate을 구별한다.
ROLLUP과 CUBE와 같은 GROUP BY의 확장기능은 모든 값의 집합이 Null에 의해 나타나지는 superaggregate 행을
생성한다. GOUPING함수를 이용하면, 규칙적인 행의 null로부터 superaggregate 행의 모든 값의 집합을 나타내는 null을
구별할수 있다.
참고 (http://radiocom.kunsan.ac.kr/lecture/oracle/function/GROUPING.html)
GROUPING 함수에서 expr은 GROUP BY구문에서 표현중에 하나와 일치할 필요가 있다.
만약 행중의 expr의 값이 모든 값 집합에서 나타나는 null이라면, 1의 값을 반환한다. 그 이외의 경우에는 zero를 반환한다.
GROUPING함수에 의해 반환되는 값의 데이터 형은 Oracle NUMBER이다. SELECT group_by_clause
를 참조.
GROUPING 함수는 ROLLUP이나 CUBE 연산자와 함께 사용하여 GROUPING 함수에
기술된 컬럼이 그룹핑 시 즉, ROLLUP이나 CUBE 연산시 사용이 되었는지를 보여 주는 함수이다. 특별히 연산 기능은 없으며 ROLLUP이나
CUBE 연산 후 출력된 결과에 대한 사용자의 이해를 높이기 위해 사용된다. 즉, GROUPING 함수를 이용할 경우 출력되는 결과값 중
NULL값이 있다면 이 NULL값이 ROLLUP이나 CUBE 연산의 결과로 생성된 것인지, 원래 테이블상에 NULL값으로 저장된 것인지를 확인할
수 있다.
• grouping 함수는 인수 로 하나의 값만을 가질 수 있다.
• grouping 함수에 사용된 인수는 GROUP BY 절에 기술된 값중에 하나와 반드시 일치되어야 한다.
• GROUPING 함수는 결과값으로 0 또는 1을 리턴한다. 0값을 리턴하는 경우, 해당 인수로 쓰인 값이 ROLLUP이나
CUBE 연산시 사용되어 졌음을 나타내는 것이고, 1값을 리턴하는 경우 ROLLUP이나 CUBE 연산시 사용되어 지지 않았음을 나타낸다.
Group by에서 Rollup과 Cube 조건 참조
http://radiocom.kunsan.ac.kr/lecture/oracle/statement_select/rollup_cube.html
예제 |
다음 예제는 hr.departments와 hr.employees테이블에서 만약 GROUPING
함수가 1을 반환했다면(테이블에서 규칙적 행보다 superaggregate행을
지적), 그때는 그 이외의 경우에 표시되는 null 대신에 문자열 "All Jobs"이 "JOB"열에 표시된다. (Rollup 결과로 발생하는
JOB의 NULL값을 "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); DEPARTMENT JOB Total Empl Average Sal ------------------------------ ---------- ---------- ----------- Accounting AC_ACCOUNT 1 99600 Accounting AC_MGR 1 144000 Accounting All Jobs 2 121800 Administration AD_ASST 1 52800 Administration All Jobs 1 52800 Executive AD_PRES 1 288000 Executive AD_VP 2 204000 Executive All Jobs 3 232000 Finance FI_ACCOUNT 5 95040 Finance FI_MGR 1 144000 Finance All Jobs 6 103200 . . .