[Oracle] 순위 함수

순위 함수

ORDER BY 절로 정렬된 값들에 INDEX 를 부여하고 싶을 때, 단순히 ROWNUM 을 사용해보자. 결과는 일련번호들이 뒤죽박죽으로 섞이게 된다. ROWNUM 은 WHERE 절에서 생성되는 것이고, ORDER BY 는 그 이후에 사용되기 때문이다.

정렬된 상태에 그대로 번호를 부여하는 함수가 있을까?

SELECT ROW_NUMBER() OVER (ORDER BY HIT), ID, TITLE, WRITER_ID, REGDATE, HIT
FROM NOTICE;

이렇게 ROW_NUMBER() OVER 를 사용한다. OVER 키워드는 HIT 으로 정렬한 후에 사용하라는 뜻이다. 여기서 RANK() OVER 로 바뀌면 순서가 아니라 순위표가 된다. 같은 점수로 생기는 같은 등수 이후에 순위를 이어나가고 싶다면 DENSE_RANK() 를 사용하면 된다.

끝으로 특정 기준별로 나눠서 정리하려면 OVER 뒤 괄호 안에 PARTITION BY 를 지정해 그룹별로 따로 순서, 순위를 정해줄 수 있다. DESC 또는 ASC 역시 사용자가 정할 수 있다.

Updated:

Leave a comment