기록

database - 윈도우 함수에서의 두 가지 ORDER BY 본문

[Study]/Database

database - 윈도우 함수에서의 두 가지 ORDER BY

Dannnnnn 2019. 8. 5. 17:14
반응형

윈도우 함수의 출력 형식에 대한 주의점이 있다. 바로 레코드의 정렬 순서다.

 

윈도우 함수를 사용할 때 OVER 구 안에 ORDER BY 구를 사용하기 때문에

이 ORDER BY에서 지정한 순서로 정렬된다고 착각할 수 있다.

 

OVER 구 내의 ORDER BY는 단지 윈도우 함수가 어떤 순서로 계산할지 결정하기 위한 것으로,

출력 순서에는 영향을 끼치지 않는다.

 

select goods_name, goods_classify, sell_price,
rank() over (order by sell_price) as 랭킹
from Goods;

DBMS에 따라 다르지만, 이 SELECT문의 출력 결과의 정렬 순서는 보장되지 않는다.

 

그렇다면 랭킹 열을 오름차순으로 제대로 정렬하려면? 간단하다.

select 문 마지막 (from 구 뒤)에 ORDER BY 구를 지정하면 된다.

 

select goods_name, goods_classify, sell_price,
rank() over (order by sell_price) as 랭킹
from Goods
order by 랭킹;

 

order by를 하나의 select 문 안에 2회 사용하는 것에 위화감을 느낄 수 있겠지만,

이 두가지는 모습만 같을 뿐 기능은 전혀 다르다는 것에 유의하자.

반응형