[Oracle] ROLLUP, GROUPING SETS
** ROLLUP
- 그룹조건에 따라 전체 행을 그룹화하고, 각 그룹에 대한 부분합을 구하는 연산자
- ROLLUP절에는 255개의 컬럼까지 가능
- ROLLUP절에 컬럼의 개수가 n개이면 그룹핑 조합은 n + 1개
** GROUPING SETS
- 동일한 퀴리에 대해서 다양한 그룹핑을 정의 가능
- 개별로 그룹핑하여 UNION ALL한 경우와 동일하나, 성능적인 면에서 뛰어남
SQL >
SELECT JBDATE, BAYONG, SUM(CHARGE) CHARGE
FROM INVCON
WHERE JBDATE BETWEEN '2013-02-04' AND '2013-02-06'
AND BAYONG IN ('BS01','BS03')
GROUP BY ROLLUP (JBDATE, BAYONG);
SQL >
SELECT JBDATE, BAYONG, SUM(CHARGE) CHARGE
FROM INVCON
WHERE JBDATE BETWEEN '2013-02-04' AND '2013-02-06'
AND BAYONG IN ('BS01','BS03')
GROUP BY GROUPING SETS ((JBDATE, BAYONG), (JBDATE), ());
>> 동일한 결과 나옴
JBDATE BAYO CHARGE
---------- ---- ----------
2013-02-04 BS01 90508
2013-02-04 BS03 559711
2013-02-04 650219
2013-02-05 BS01 176733
2013-02-05 BS03 533863
2013-02-05 710596
2013-02-06 BS01 93938
2013-02-06 BS03 371616
2013-02-06 465554
1826369
SQL >
SELECT JBDATE, BAYONG, SUM(CHARGE) CHARGE
FROM INVCON
WHERE JBDATE BETWEEN '2013-02-04' AND '2013-02-06'
AND BAYONG IN ('BS01','BS03')
GROUP BY GROUPING SETS ((JBDATE, BAYONG),());
>> JBDATE의 그룹핑은 제외
JBDATE BAYO CHARGE
---------- ---- ----------
2013-02-04 BS01 90508
2013-02-04 BS03 559711
2013-02-05 BS01 176733
2013-02-05 BS03 533863
2013-02-06 BS01 93938
2013-02-06 BS03 371616
1826369
'Database / Sql' 카테고리의 다른 글
[MSSQL] 전체 백업 유지관리 계획 만들기 (4) | 2013.03.19 |
---|---|
[MSSQL] LOCK 확인 및 처리 방법 (0) | 2013.03.05 |
[Oracle] Session Timeout (0) | 2013.02.08 |
[Oracle] 테이블 하나만 복원하기 (0) | 2013.02.07 |
[Oracle] SID와 Service Name의 차이 (0) | 2013.01.25 |