window 함수에서 partition by 와 order by 에 값에 따라 값이 달라지는 이유는 뭔가요? 0 2 1,015

by 물통20병 [Oracle 기초] [2017.12.13 15:56:26]


설명을 보니 partition by 는 소그룹 group by 한 효과를 가지고 있고 소그룹별로 값을 구하니 이해가 되는데

order by는 우선순위를 준다고 되어 있는데 order by 뒤에 칼럼이 오는것에 따라서 값이 다른경우가 있습니다.

우선순위에 역활에 따라 윈도우 함수의 값이 다른 경우가 있나요? 왜그런건가요?

by 우리집아찌 [2017.12.13 16:23:22]

함수의 기능에 대해 더 공부해보세요.

글로만 읽지마시고 실행하는 습관도 들이세요.


by jkson [2017.12.13 17:38:17]

partition by는 이해하셨죠?

해당 소그룹 내에서 순위라든지, 합계 등을 구할 수 있는게 윈도우 함수잖아요?

그럼 예를 들어 소그룹내에 순위를 구한다고 하면

해당 소그룹 내에서 어떤 기준으로 순위를 구할까요? order by에 명시한 컬럼을 기준으로 순위를 구할 수 있겠죠?

소그룹내에서 합계를 구할 때도 그냥 소그룹 전체의 합계만 알고 싶을 수도 있지만

특정 기준을 두고 순차적으로 합계되는 과정을 보고 싶을 수도 있죠.

'순차적' 인 개념이 들어가는 어떠한 결과를 보고 싶을 때 order by를 쓰신다고 보면 됩니다.

--예시
with t as
(
select 1 id , 1 val from dual union all
select 1 id , 2 val from dual union all
select 1 id , 3 val from dual union all
select 2 id , 4 val from dual union all
select 3 id , 5 val from dual
)
select id
, val
,row_number() over(order by val) rn1
,row_number() over(partition by id order by val) rn2
--,row_number() over(partition by id) rn3--기준이 없는 순위는 존재할 수 없으므로 오류
,sum(val) over(partition by id) sum1
,sum(val) over(partition by id order by val) sum2
from t  a
order by id, val

 

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