기록
database - CUBE, GROUPING SETS 본문
ㅡ 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을 사용하는 경우는 적을 것이다.
'[Study] > Database' 카테고리의 다른 글
database - ROLLUP, GROUPING (0) | 2019.08.06 |
---|---|
database - 윈도우 함수에서의 두 가지 ORDER BY (0) | 2019.08.05 |
database - 윈도우 함수에서의 집계함수, 이동평균 (0) | 2019.08.05 |
database - 윈도우 함수 (OLAP 함수) (0) | 2019.08.03 |
database - 관계 나눗셈 (0) | 2019.08.03 |