기록

database - CUBE, GROUPING SETS 본문

[Study]/Database

database - CUBE, GROUPING SETS

Dannnnnn 2019. 8. 6. 11:14
반응형

ㅡ CUBE

 

CUBE는 입방체라는 의미이며, ROLLUP과 마찬가지로 동작을 연상해서 붙인 명칭이다.

구문 사용법은 ROLLUP과 동일하다.

 

CUBE란, GROUP BY에 부여된 집약 키를 가능한 모든 조합으로 섞어서 하나의 결과에 포함시키는 기능이다.

이 때문에 조합 수는 2^n이 된다. (n은 키의 수)

 

ㅡ GROUPING SETS

마지막으로 소개할 GROUPING 연산자는 GROUING SETS이다.

이것은 ROLLUP이나 CUBE에서 구한 결과 중 일부 레코드만 필요한 경우에 사용한다.

 

CUBE는 집약 키의 모든 가능한 조합을 구한다.

이중에서 '상품분류', '등록일' 각각을 단독 집약 키로 한 경우만 구하고 싶다.

반대로 말하면, 합계 레코드와 집약 키로 2개 키를 사용한 레코드가 불필요할 때 GROUPING SETS을 이용한다.

 

SELECT CASE WHEN GROUPING(goods_classify) = 1
THEN '상품분류 합계'
ELSE goods_classify END AS 상품그룹,
CASE WHEN GROUPING(register_date) = 1
THEN '등록일 합계'
ELSE CAST(register_date AS VARCHAR(16)) END AS 등록일자,
SUM(sell_price) AS 판매가격합계
FROM Goods
GROUP BY GROUPING SETS (goods_classify, register_date);

 

이 결과에는 전체 합계 행은 존재하지 않는다.

이와 같이 ROLLUP이나 CUBE가 규칙적인 결과를 얻을 수 있는데 반해,

GROUPING SETS는 그 중에서 조건을 개별 지정하여 추출하고 비정형적 결과를 얻고자 할 때 사용한다.

 

이런 변칙적인 결과가 바람직한 경우는 매우 제한적이기에,

앞의 두 함수에 비해 GROUPING SETS을 사용하는 경우는 적을 것이다.

반응형