-
[Oracle] sum() over()DB/Oracle 2019. 9. 5. 03:36
[배경] over() 내 order by 구문으로 결과가 다르게 나타난다
WITH t AS ( SELECT '20150801' dt, 1 id FROM dual UNION ALL SELECT '20150801', 2 FROM dual UNION ALL SELECT '20150801', 1 FROM dual UNION ALL SELECT '20150802', 1 FROM dual UNION ALL SELECT '20150802', 2 FROM dual UNION ALL SELECT '20150802', 2 FROM dual UNION ALL SELECT '20150803', 3 FROM dual UNION ALL SELECT '20150804', 4 FROM dual UNION ALL SELECT '20150804', 1 FROM dual UNION ALL SELECT '20150805', 1 FROM dual ) SELECT dt ,count(dt) ,SUM(COUNT(dt)) OVER(ORDER BY DT) A *** ,SUM(COUNT(dt)) OVER() B *** FROM t GROUP BY DT;
[결과화면]
[경과] over()의 order by는
1) 파티션 내 순서 지정함
2) rows / range의 이전 및 다음 행을 확인하는 기준
OVER ( [ <PARTITION BY clause> ] [ <ORDER BY clause> ] ... 파티션 내 순서 지정 [ <ROW or RANGE clause> ] ... 파티션 내 행 제한, 행 범위 지정** ) ** 기본 값이 있다. 정렬된 결과의 처음부터 현재행까지. ** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
[결과]
SUM(COUNT(dt)) OVER() ... 모든 'count(dt)' 로우의 합
SUM(COUNT(dt)) OVER(PARTITION BY dt) ... dt별 'count(dt)' 로우의 합
SUM(COUNT(dt)) OVER(ORDER BY DT) ... 'count(dt)' 로우의 첫행에서 현재행까지 합'DB > Oracle' 카테고리의 다른 글
[Oracle] basic (0) 2020.03.22