Skip Headers

오라클 10g 함수
10g Release 1 (10.1)
Go to Documentation Home
HOME
Go to Book List
ORA_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
ORA_10G
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

GROUPING

문법

MAIN

grouping::=
Description of grouping.gif follows

그림 설명
 

목적

MAIN

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


 

예제

MAIN

다음 예제는 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
. . .