기록
database - 윈도우 함수에서의 두 가지 ORDER BY 본문
반응형
윈도우 함수의 출력 형식에 대한 주의점이 있다. 바로 레코드의 정렬 순서다.
윈도우 함수를 사용할 때 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회 사용하는 것에 위화감을 느낄 수 있겠지만,
이 두가지는 모습만 같을 뿐 기능은 전혀 다르다는 것에 유의하자.
반응형
'[Study] > Database' 카테고리의 다른 글
database - CUBE, GROUPING SETS (0) | 2019.08.06 |
---|---|
database - ROLLUP, GROUPING (0) | 2019.08.06 |
database - 윈도우 함수에서의 집계함수, 이동평균 (0) | 2019.08.05 |
database - 윈도우 함수 (OLAP 함수) (0) | 2019.08.03 |
database - 관계 나눗셈 (0) | 2019.08.03 |