ROLLUP, CUBE, GROUPING SETS 등과 함께 쓰이며 소계를 나타내는 Row를 구분할 수 있게 해준다.

ROLLUP, CUBE, GROUPING SETS 에서는 그룹핑의 기준이 되는 컬럼을 제외하고 모두 NULL 값으로 표현되지만,

GROUPING 함수를 이용하면 원하는 위치에 원하는 텍스트를 출력할 수 있다.

GROUPING 만 사용했을 때

SELECT ORDER_DT,
			 GROUPING(ORDER_DT),
			 COUNT(*)
	FROM STARBUCKS_ORDER
GROUP BY ROLLUP(ORDER_DT)
ORDER BY ORDER_DT;

Untitled

소계가 계산된 Row (11번 Row) 에서는 GROUPING 함수의 결과값이 1이 되고, 나머지 Row에서는 0이 된다.

GROUPING 결과값에 대해 CASE문을 이용해 원하는 텍스트 출력

SELECT CASE GROUPING(ORDER_DT)
						WHEN 1 THEN 'TOTAL' ELSE ORDER_DT
			 END AS ORDER_DT,
			 COUNT(*)
	FROM STARBUCKS_ORDER
GROUP BY ROLLUP(ORDER_DT)
ORDER BY ORDER_DT;

Untitled

(ORACLE) DECODE 문으로 CASE 문 대체

SELECT DECODE(GROUPING(ORDER_DT), 1, 'TOTAL', ORDER_DT) AS ORDER_DT,
			 COUNT(*)
	FROM STARBUCKS_ORDER
GROUP BY ROLLUP(ORDER_DT)
ORDER BY ORDER_DT;

그룹핑하는 컬럼이 2개일 때

SELECT ORDER_DT,
			 GROUPING(ORDER_DT),
			 ORDER_ITEM,
			 GROUPING(ORDER_ITEM),
			 COUNT(*)
	FROM STARBUCKS_ORDER
GROUP BY ROLLUP(ORDER_DT, ORDER_ITEM)
ORDER BY ORDER_DT;

Untitled