oracle에서 rows와 range의 차이점이 무엇인가요? 1 4 1,613

by 김전포 [Oracle 기초] [2016.09.06 11:13:56]


안녕하세요.. 분석함수를 공부하던중 이해가 안되는 부분이 있어서 이렇게 질문드립니다

 

 with t as
(
select 1 val from dual
union all
select 2 from dual
union all
select 3 from dual
union all
select 4 from dual
union all
select 5 from dual
union all
select 7 from dual
union all
select 8 from dual
union all
select 8 from dual
)
select val
, sum(val) over(order by val rows 2 preceding) rowsval
, sum(val) over(order by val range 2 preceding) rangeval
 from t;

rows은 val값을 기준으로 자신의 행을 포함한 2번째 이전까지의 행을 합한거 같고..

range는 rows와 동일하게 2번째 이전의 행을 합하다가 val값이 8일때는 갑자기 왜 23이 나오는지....허.,,ㅠㅠ

도무지 원리를 모르겠습니다 ㅠㅠ

by 마농 [2016.09.06 11:44:45]

Rows 는 행 연산이고
Range 는 값 연산입니다.
값 8 의 경우 6,7,8 값을 합산하지요.


by 김전포 [2016.09.06 11:49:43]

답변감사합니다 ㅎㅎ

근데 6,7,8의 합이면 val이 8일때는 21이 되어야하는게 아닌가요..?

어째서 23이되는지.,,.ㅠㅠ


by 마농 [2016.09.06 12:24:46]

6 + 7 + 8 이란게 아니구요.

6,7,8 에 해당하는 값들의 합입니다.

위 예시에서는 6은 없고, 7이 하나, 8이 두개네요.

6*0 + 7*1 + 8*2 = 23


by 김전포 [2016.09.06 13:10:03]

와...어제부터 계속 고민하던건데....제가 너무 꽉막힌 생각을 했었네요

고맙습니다!!!!!!!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입