by 물통20병 [Oracle 기초] [2017.12.13 15:56:26]
설명을 보니 partition by 는 소그룹 group by 한 효과를 가지고 있고 소그룹별로 값을 구하니 이해가 되는데
order by는 우선순위를 준다고 되어 있는데 order by 뒤에 칼럼이 오는것에 따라서 값이 다른경우가 있습니다.
우선순위에 역활에 따라 윈도우 함수의 값이 다른 경우가 있나요? 왜그런건가요?
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