- 윈도우 함수 사용하여 누적 값 구하기 : sum() over(partition by) 사용하여 그룹별 row 누적 값을 구해보자 - RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW <-- 기본 값 range between ... : 값을 기준으로 같은 값이면 묶어서 계산하여 마지막 값을 보여줌(RANGE_TEST 컬럼 값 600 부분 참고) rows between ... : row 기준으로 row 단위 순차 누적 값을 반환 (ROW_TEST 컬럼 값 참고) |
range / rows 일 때 결과 값 차이 테스트
WITH tmp AS (
SELECT 'a' c1, 1 c2, 100 c3 FROM dual UNION ALL
SELECT 'a' c1, 2 c2, 100 c3 FROM dual UNION ALL
SELECT 'a' c1, 3 c2, 100 c3 FROM dual UNION ALL
SELECT 'b' c1, 1 c2, 200 c3 FROM dual UNION ALL
SELECT 'b' c1, 2 c2, 200 c3 FROM dual UNION ALL
SELECT 'b' c1, 2 c2, 200 c3 FROM dual
)
SELECT c1, c2, c3
, sum(c3) OVER(PARTITION BY c1 ORDER BY c2) def_test
, sum(c3) OVER(PARTITION BY c1 ORDER BY c2 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) RANGE_TEST
, sum(c3) OVER(PARTITION BY c1 ORDER BY c2 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) ROW_TEST
FROM tmp ;
C1 C2 C3 DEF_TEST RANGE_TEST ROW_TEST
a 1 100 100 100 100
a 2 100 200 200 200
a 3 100 300 300 300
b 1 200 200 200 200
b 2 200 600 600 400 --# 이 부분이 차이남
b 2 200 600 600 600 --# 이 부분이 차이남
'DBMS > SQL튜닝' 카테고리의 다른 글
오라클 PARALLEL(병렬처리) PQ_DISTRIBUTE 힌트 (0) | 2023.09.21 |
---|---|
PARALLEL SQL DBMS_XPLAN 실행통계 보기 (0) | 2023.08.04 |
INSERT..SELECT / INSERT..VALUES 성능 테스트 (0) | 2023.08.02 |
rollup, grouping sets, cube, grouping 함수 (0) | 2023.07.30 |
oracle ABS 함수, 절대값을 구하는 함수 (0) | 2023.07.18 |
댓글