티스토리 뷰

GROUP BY 절에서 사용하며 소계 및 총계 결과를 보여주는 함수

 

-사용방법

  ROLLUP(A)

  ROLLUP(A,B,....)

 

[CLOTHES_ORDER (주문 테이블)]

SELECT * FROM CLOTHES_ORDER 
CO_NOCO_CATEGORYCO_SIZECO_USER_NAMECO_DATE
1상의M길동이2024-02-27 00:00:00.000
2상의M길동이2024-02-28 00:00:00.000
3하의M길동이2024-02-29 00:00:00.000
4상의S현주2024-02-28 00:00:00.000
5신발L길동이2024-02-28 00:00:00.000
6하의M길동이2024-02-27 00:00:00.000
7아우터M길동이2024-02-27 00:00:00.000
8상의S추니2024-02-27 00:00:00.000
9아우터S현주2024-02-29 00:00:00.000
10상의L추니2024-02-29 00:00:00.000

 

- ROLLUP(A) 일 경우

-- 날짜별로 옷을 몇개나 팔았는지 카운트
SELECT CO_DATE,count(*) FROM CLOTHES_ORDER GROUP BY ROLLUP(CO_DATE) ORDER BY CO_DATE
CO_DATECOUNT(*)
2024-02-27 00:00:00.0004
2024-02-28 00:00:00.0003
2024-02-29 00:00:00.0003
 10

 

위와 같이 ROLLUP(A)처럼 매개변수가 하나라면 

A컬럼의 값이 그룹핑 된 결과가 주르륵 나오고

마지막에 총계가 나온다.

 

 

 

- ROLLUP(A, B) 일 경우

/*
* 만약 ROLLUP의 인자 값이 ROLLUP(A,B)이면
* A,B로 그룹화한 결과
* A로 그룹화 한 결과
* 순대로 보여준다.
* 아래를 설명해보면 A날짜별+B카테고리별 그룹핑 결과를 먼저 보여주고
* 그 다음에 A날짜별 그룹핑 결과를 보여준다.
* 역시 맨 마지막에 총계를 보여준다.
*/
SELECT to_char(CO_DATE, 'mm-dd'),CO_CATEGORY,count(*) FROM CLOTHES_ORDER GROUP BY ROLLUP(CO_DATE,CO_CATEGORY) ORDER BY CO_DATE
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
  10

 

 

 

 

- ROLLUP(A, B, C) 일 경우

/*
* 만약 ROLLUP의 인자 값이 ROLLUP(A,B,C)이면
* A,B,C로 그룹화한 결과
* A,B로 그룹화한 결과
* A로 그룹화 한 결과
* 순대로 보여준다. 그리고 맨 마지막에 총계를 보여준다.
* 아래를 설명해보면 A날짜별+B카테고리별 그룹핑 결과를 먼저 보여주고
* 그다음엔 A,B 그룹핑 결과를
* 그 다음에 A날짜별 그룹핑 결과를 보여준다.
* 역시 맨 마지막에 총계를 보여준다.
*/
SELECT to_char(CO_DATE, 'mm-dd'),CO_CATEGORY,CO_SIZE,count(*) FROM CLOTHES_ORDER GROUP BY ROLLUP(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  4
02-28상의M1
02-28상의S1
02-28상의 2
02-28신발L1
02-28신발 1
02-28  3
02-29상의L1
02-29상의 1
02-29아우터S1
02-29아우터 1
02-29하의M1
02-29하의 1
02-29  3
   10

 

 

 

- ROLLUP( (A, B) ) 일 경우 (함수 안에 괄호)

/*
* 만약 ROLLUP((A, B)) 처럼 함수안에서 괄호로 묶여 있다면 어떻게 될까?
* 괄호가 없을 때는 원래 대로라면 A, B 그룹화, A 그룹화가 되어야 하지만
* 함수안에 괄호가 있다면 한몸처럼 생각하면 된다. 따로 그룹화 하지 않는다는 뜻
* 그래서 결과는 A, B로 그룹화 한것을 보여주고 마지막에 총 갯수를 보여줄 것이다
*/
SELECT to_char(CO_DATE,'mm/dd'), CO_CATEGORY, count(*) FROM CLOTHES_ORDER
GROUP BY ROLLUP((CO_DATE, CO_CATEGORY))
TO_CHAR(CO_DATE,'MM/DD')CO_CATEGORYCOUNT(*)
02/27상의2
02/27하의1
02/27아우터1
02/28상의2
02/28신발1
02/29상의1
02/29하의1
02/29아우터1
  10

ROLLUP( (A, B, C) )  3개의 인자가 전부 함수 안에서 괄호로 묶여 있다면?

3개가 한몸이므로 따로 그룹핑하지 않기 때문에

A,B,C에 대한 그룹화만 이루어진 뒤 마지막에 총계를 표시할 것이다.

 

 

 

 

- ROLLUP( (A, B) , C) 일 경우 (함수 안에 괄호)

/*
* 여기도 마찬가지로 ROLLUP((A,B),C)함수 안에서 괄호가 있는데 인자가 3개이고 앞 인자 2개가 괄호로 묶여 있다.
* 괄호로 묶여 있으면 한몸 이라고 했다.
* 그래서 A,B는 한몸이기 때문에 A 홀로는 그룹화 결과에서 제외된다.
* 그래서 A,B,C -> A,B 순서로 그룹화 되고 마지막에 총계를 표시한다.
* 하지만 여기서 HAVING절로 특정 부분만 뽑아낸다면 아래 결과처럼 총계는 표시되지 않는다.
*/
SELECT to_char(CO_DATE,'mm/dd'), CO_CATEGORY, CO_SIZE,count(*) FROM CLOTHES_ORDER
GROUP BY ROLLUP((CO_DATE, CO_CATEGORY), CO_SIZE)
HAVING EXTRACT(DAY FROM CO_DATE) = 27
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

 

 

 

- ROLLUP(A, (B, C) ) 일 경우 (함수 안에 괄호)

/*
* 3개 인자 중에서 괄호가 뒤 두개에 있으므로 괄호는 한몸이란것을 기억하면
* A,B,C그룹화 -> A그룹화가 되어
* 날짜,카테고리,사이즈 별 그룹화
* 날짜 그룹화
* 순으로 보여질 것이며, 마지막에 총계가 표시된다.
*/
SELECT to_char(CO_DATE,'mm/dd'), CO_CATEGORY, CO_SIZE,count(*) FROM CLOTHES_ORDER
GROUP BY ROLLUP(CO_DATE, (CO_CATEGORY, CO_SIZE))
TO_CHAR(CO_DATE,'MM/DD')CO_CATEGORYCO_SIZECOUNT(*)
02/27상의M1
02/27상의S1
02/27하의M1
02/27아우터M1
02/27  4
02/28상의M1
02/28상의S1
02/28신발L1
02/28  3
02/29상의L1
02/29하의M1
02/29아우터S1
02/29  3
   10

'SQLD' 카테고리의 다른 글

GROUP BY 절에서 사용하는 CUBE 소계 총계  (0) 2024.02.29
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday