본문 바로가기
DBMS/SQL튜닝

윈도우함수 사용하여 누적 값 구하기

by 드바 2023. 8. 20.

 

 

- 윈도우 함수 사용하여 누적  구하기
 : 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 --# 이 부분이 차이남

 

댓글