티스토리 뷰

ROLLUP 이 한방향으로 그룹화를 했다면

CUBE 는 양방향 그룹화를 해서 소계 총계를 낸다.

 

ROLLUP(A,B,C) 이

A,B,C

A,B

A

총계

순으로 데이터 그룹화를 해서 소계 및 총계를 보여준다면...

 

CUBE(A,B,C) 는

A,B,C

A,B

A,C

A

B,C

B

C

총계

와 같은 결과를 보여준다. 전 양쪽 방향으로 그룹해서 소계총계를 보여준다고 생각하면 된다.

 

 

- CUBE(A)

 

/*
* CUBE의 인자가 하나일 때는 ROLLUP이 인자가 하나일 때와 같은 결과가 나온다.
*/
SELECT TO_CHAR(CO_DATE, 'mm/dd'),count(*) FROM CLOTHES_ORDER
GROUP BY CUBE(CO_DATE)
TO_CHAR(CO_DATE,'MM/DD')COUNT(*)
 10
02/274
02/283
02/293

 

 

 

- CUBE(A,B)

/*
* CUBE(A, B) 인자가 2개라면
* A, B그룹화
* A 그룹화
* B 그룹화
* 총계
* 순서대로 나온다.
* 실제 조회되는 것을 보면 B만 그룹화 하는 행들은 CO_DATE(날짜)값이 null이기 때문에
* order by절 정렬기준에서 null이기 때문에 뒤에 위치하며 그 다음에 총계가 표시된다.
*
*/
SELECT TO_CHAR(CO_DATE, 'mm/dd'), CO_CATEGORY, count(*) FROM CLOTHES_ORDER
GROUP BY CUBE(CO_DATE, CO_CATEGORY)
ORDER BY CO_DATE, CO_CATEGORY
TO_CHAR(CO_DATE,'MM/DD')CO_CATEGORYCOUNT(*)
02/27상의2
02/27아우터1
02/27하의1
02/27 4
02/28상의2
02/28신발1
02/28 3
02/29상의1
02/29아우터1
02/29하의1
02/29 3
 상의5
 신발1
 아우터2
 하의2
  10

 

 

 

- CUBE(A,B,C)

/*
* CUBE(A,B,C) 처럼 인자 값이 3개라면
* A,B,C
* A,B
* A,C
* A
* B,C
* B
* C
* 총계 순으로 결과가 나온다.
*/
SELECT TO_CHAR(CO_DATE, 'mm/dd'), CO_CATEGORY, CO_SIZE, count(*) FROM CLOTHES_ORDER
GROUP BY CUBE(CO_DATE, CO_CATEGORY, CO_SIZE)
ORDER BY CO_DATE
TO_CHAR(CO_DATE,'MM/DD')CO_CATEGORYCO_SIZECOUNT(*)
02/27상의M1
02/27상의S1
02/27상의 2
02/27아우터M1
02/27아우터 1
02/27하의M1
02/27하의 1
02/27 M3
02/27 S1
02/27  4
02/28상의M1
02/28상의S1
02/28상의 2
02/28신발L1
02/28신발 1
02/28 L1
02/28 M1
02/28 S1
02/28  3
02/29상의L1
02/29상의 1
02/29아우터S1
02/29아우터 1
02/29하의M1
02/29하의 1
02/29 L1
02/29 M1
02/29 S1
02/29  3
 상의L1
 상의M2
 상의S2
 상의 5
 신발L1
 신발 1
 아우터M1
 아우터S1
 아우터 2
 하의M2
 하의 2
  L2
  M5
  S3
   10

 

 

 

 

- CUBE( (A,B) ,C)

/*
* CUBE((A,B),C) 처럼 함수안에 A,B요소가 괄호로 묶여있을 경우
* 먼저 전체적으로 A,B,C는 괄호가 있어도 그룹화 한다.
* ROLLUP에서 설명한 것 처럼 괄호로 묶인 A,B는 한몸이기 때문에
* A,B둘중에 하나가 단독으로 그룹화 하지 않고
* 밖에 있는 C와 같이 A,C 또는 B,C도 그룹화 하지 않는다.
* A,B,C
* A,B
* A,C(안됨)
* A(안됨)
* B,C(안됨)
* B(안됨)
* C
* 총계
* 순으로 결과가 나온다.
*/
SELECT TO_CHAR(CO_DATE, 'mm/dd'), CO_CATEGORY, CO_SIZE, count(*) FROM CLOTHES_ORDER
GROUP BY CUBE((CO_DATE, CO_CATEGORY), CO_SIZE)
ORDER BY CO_DATE
TO_CHAR(CO_DATE,'MM/DD')CO_CATEGORYCO_SIZECOUNT(*)
02/27상의M1
02/27상의S1
02/27아우터 1
02/27하의 1
02/27상의 2
02/27아우터M1
02/27하의M1
02/28상의 2
02/28신발 1
02/28상의M1
02/28상의S1
02/28신발L1
02/29아우터S1
02/29상의L1
02/29하의M1
02/29하의 1
02/29아우터 1
02/29상의 1
  L2
  M5
   10
  S3

 

 

 

 

- CUBE(A, (B,C) )

/*
* CUBE(A,(B,C)) 함수 안에 괄호가 뒤 두개의 요소에 묶여 있을 경우 그룹화는
* A,B,C
* A
* B,C
* 총계
* 순으로 나온다. 괄호를 여러번 설명 했으니 이해가 될것이다.
*/
SELECT TO_CHAR(CO_DATE, 'mm/dd'), CO_CATEGORY, CO_SIZE, count(*) FROM CLOTHES_ORDER
GROUP BY CUBE(CO_DATE, (CO_CATEGORY, CO_SIZE))
ORDER BY CO_DATE
TO_CHAR(CO_DATE,'MM/DD')CO_CATEGORYCO_SIZECOUNT(*)
02/27상의M1
02/27하의M1
02/27  4
02/27상의S1
02/27아우터M1
02/28신발L1
02/28상의M1
02/28  3
02/28상의S1
02/29아우터S1
02/29하의M1
02/29상의L1
02/29  3
 신발L1
 하의M2
 아우터M1
 아우터S1
 상의M2
 상의L1
   10
 상의S2

 

 

 

 

- GROUP BY CUBE( (A, B) )

인자가 전부다 괄호안에 있기 때문에

한몸이므로

 

A,B 그룹화총계로만 결과가 나온다

 

- GROUP BY CUBE( (A, B, C) )

역시 인자가 3개가 전부다 괄호안에 있기 때문에

한몸이므로

 

A,B,C 그룹화

총계

로만 결과가 나온다

'SQLD' 카테고리의 다른 글

[SQLD] GROUP BY 관련 소계(총계) ROLLUP 함수  (0) 2024.03.21
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday