[oracle]오라클 grouping, grouping_id 설명 및 예제 :: 개발/일상_Mr.lee

[oracle]오라클 grouping, grouping_id 설명 및 예제

Posted by Mr.mandu.
2016. 5. 23. 06:30 개발/DB

안녕하세요.


오라클의 group by를 공부하면서 grouping이 나와서... 포스팅하게 되었습니다.

아직 제가 유용하게 써본적은 없지만....

굳이 말하자면 소계, 합계 구할때 정도???


하지만 알아두면 좋은 개념이라고 생각되어 정리해 두려고 합니다.


먼저 기본적인 개념 입니다.


Grouping(컬럼명)

 - GROUPING 함수는 그룹쿼리에서 사용하는 함수로 파라미터의 평가값이 NULL 이면 1,

NULL 이 아닌 경우에는 0을 반환합니다.

 

※ GROUPING 함수에서 사용될 컬럼은 반드시 GROUP BY 절에서 명시 되어야 합니다.


 즉, 해당 Row가 RollUp에 의서인지 Cube에 의해서 산출된 값인지 구별 할 수가 있습니다.


※ 간단히 말하면 rollup은 함계 를 구하는데 쓰고

    음... cube는 각 컬럼별로 합계가 다 나온다고 해야하나...?

    사실 아직 cube의 활용도에 대해 생각해본적이 없어서 제대로 말을 못하겠네요 ㅠㅠ


다음으로

Grouping_id(컬럼명 a, 컬럼명 b,......)

 - Grouping(컬럼명 a) || Grouping(컬럼명 b)의 값을 2진수에서 10진수로 변환한 값입니다.


이 말은... 글로쓰면 이해하는데 불편하실 수도 있으니 예제를 통해 알아보겠습니다.



먼저 현재 테이블의 모습입니다.



여기에 Grouping과 Grouping_id를 적용해 보겠습니다.

실행쿼리는 다음과 같습니다.


select

position,

 subject,

  sum(bonus),

  grouping(position) as grp_position,

  grouping(subject) as grp_subject,

  grouping_id(position,  subject) as gid

from

professor

group by rollup(position,  subject)

;


이 쿼리의 뜻은,  position 별로 bonus의 합계를 구하기 위한 쿼리 입니다.


결과는 다음과 같습니다.




결과로, 12행을 보시면 subject의 값이 null 입니다. 그러니 grouping의 값은 1을 출력하겠죠?


gid의 값은


00 - > 0

01 - > 1

11 - > 3


2진법 문자그대로 십진수로 계산하시면 됩니다.


그럼 수고하세요~!