문제
소계 함수(ROLLUP/CUBE)와 함께 사용되는 GROUPING 함수의 특징은?
① 집계 연산으로 생성된 NULL 항목에 대해 1을 반환한다. ② 집계에 사용되지 않은 데이터는 무조건 에러가 난다. ③ 데이터 자체에 들어있는 NULL과 집계로 인한 NULL을 구분할 수 없다. ④ ROLLUP에만 사용할 수 있다.
정답
1번
해설
정답: 1. GROUPING 함수는 ROLLUP/CUBE/GROUPING SETS 가 만들어 낸 소계·총계 행의 NULL(집계로 인한 NULL)이면 1을, 그렇지 않으면 0을 반환한다.
오답 풀이
- ①: 정답.
- ②: 집계에 쓰이지 않은 데이터로 에러가 나지 않는다. GROUPING 은 단지 0/1 을 돌려줄 뿐이다.
- ③: 정반대다. GROUPING 함수의 존재 이유가 바로 '원본 데이터의 NULL'과 '집계로 생성된 NULL'을 구분하는 것이다.
- ④: ROLLUP 뿐 아니라 CUBE, GROUPING SETS 에서도 사용할 수 있다.
보충 개념 GROUPING(컬럼) 은 해당 행이 그 컬럼에 대해 소계/총계로 집계되어 NULL 이 되었으면 1, 일반 상세 행이면 0 을 반환한다. CASE WHEN GROUPING(col)=1 THEN '합계' ELSE col END 식으로 소계 라벨을 붙이는 데 자주 쓰인다. 여러 컬럼을 묶어 표현하는 GROUPING_ID 함수도 있다.