GROUP BY와 GROUP BY~ROLLUP의 비교
SELECT TO_CHAR(T1.ORD_DT,'YYYYMM') ORD_YM
,T1.CUS_ID
,SUM(T1.ORD_AMT) ORD_AMT
FROM T_ORD T1
WHERE T1.CUS_ID IN ('CUS_0001','CUS_0002')
AND T1.ORD_DT >= TO_DATE('20170301','YYYYMMDD')
AND T1.ORD_DT < TO_DATE('20170501','YYYYMMDD')
GROUP BY TO_CHAR(T1.ORD_DT,'YYYYMM') ,T1.CUS_ID
ORDER BY TO_CHAR(T1.ORD_DT,'YYYYMM') ,T1.CUS_ID;
| ORD_YM | CUS_ID | ORD_AMT |
| ------ | -------- | ------- |
| 201703 | CUS_0001 | 2800 |
| 201703 | CUS_0002 | 4300 |
| 201704 | CUS_0001 | 5000 |
| 201704 | CUS_0002 | 1900 |
SELECT TO_CHAR(T1.ORD_DT,'YYYYMM') ORD_YM
,T1.CUS_ID
,SUM(T1.ORD_AMT) ORD_AMT
FROM T_ORD T1
WHERE T1.CUS_ID IN ('CUS_0001','CUS_0002')
AND T1.ORD_DT >= TO_DATE('20170301','YYYYMMDD')
AND T1.ORD_DT < TO_DATE('20170501','YYYYMMDD')
GROUP BY ROLLUP(TO_CHAR(T1.ORD_DT,'YYYYMM') ,T1.CUS_ID)
ORDER BY TO_CHAR(T1.ORD_DT,'YYYYMM') ,T1.CUS_ID;
| ORD_YM | CUS_ID | ORD_AMT |
| ------ | -------- | ------- |
| 201703 | CUS_0001 | 2800 |
| 201703 | CUS_0002 | 4300 |
| 201703 | | 7100 |
| 201704 | CUS_0001 | 5000 |
| 201704 | CUS_0002 | 1900 |
| 201704 | | 6900 |
| | | 14000 |
-- 주문상태, 주문년월, 고객ID 순서로 ROLLUP
SELECT T1.ORD_ST ,TO_CHAR(T1.ORD_DT,'YYYYMM') ORD_YM ,T1.CUS_ID
,SUM(T1.ORD_AMT) ORD_AMT
FROM T_ORD T1
WHERE T1.CUS_ID IN ('CUS_0001','CUS_0002')
AND T1.ORD_DT >= TO_DATE('20170301','YYYYMMDD')
AND T1.ORD_DT < TO_DATE('20170501','YYYYMMDD')
GROUP BY ROLLUP(T1.ORD_ST ,TO_CHAR(T1.ORD_DT,'YYYYMM') ,T1.CUS_ID)
ORDER BY T1.ORD_ST ,TO_CHAR(T1.ORD_DT,'YYYYMM') ,T1.CUS_ID;
| ORD_ST | ORD_YM | CUS_ID | ORD_AMT |
| ------ | ------ | -------- | ------- |
| COMP | 201703 | CUS_0001 | 2800 |
| COMP | 201703 | CUS_0002 | 4300 |
| COMP | 201703 | | 7100 |
| COMP | 201704 | CUS_0001 | 4100 |
| COMP | 201704 | CUS_0002 | 1900 |
| COMP | 201704 | | 6000 |
| COMP | | | 13100 |
| WAIT | 201704 | CUS_0001 | 900 |
| WAIT | 201704 | | 900 |
| WAIT | | | 900 |
| | | | 14000 |