소그룹 간의 소계 및 총계를 다차원적으로 계산할 수 있는 함수

GROUP BY 가 일방향으로 그룹핑하며 소계를 구했다면 CUBE는 조합할 수 있는 모든 그룹에 대한 소계를 집계한다.

| CUBE(A) | - A로 그룹핑

EX1. CUBE(A)

A별 그룹핑 + 총합계

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

Untitled

주문수량을 날짜별로 그룹핑한 결과 + 전체 총합계의 결과

ROLLUP 함수와 같은 결과

EX2. CUBE(A, B)

A, B별 그룹핑

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

Untitled

A, B별 그룹핑되고, A별 합계가 표시되고, 전체 총합계가 표시되는 부분은 ROLLUP 을 사용했을 때와 같다.

그런데 B별, 그러니까 주문음료별 그룹핑이 아래 추가로 표시되고 있다.

다음 쿼리와 같은 의미

SELECT ORDER_DT, ORDER_ITEM, COUNT(*)
	FROM STARBUCKS_ORDER
	GROUP BY ORDER_DT, ORDER_ITEM
UNION ALL
SELECT ORDER_DT, NULL, COUNT(*)
	FROM STARBUCKS_ORDER
	GROUP BY ORDER_DT
UNION ALL
SELECT NULL, ORDER_ITEM, COUNT(*)
	FROM STARBUCKS_ORDER
	GROUP BY ORDER_ITEM
UNION ALL
SELECT NULL, NULL, COUNT(*)
	FROM STARBUCKS_ORDER
	ORDER BY 1, 2;