본문 바로가기

카테고리 없음

오라클 RANK

오라클 rank 함수로 순위 구하기

DB 자료 중에 숫자로 되어 있는 값을 토대로 순위를 매겨야 할 경우 오라클 rank 함수를 사용하면 됩니다.

하지만 오라클에서 순위를 구할 때 order by 또는 rownum 사용할 수가 있는데요. 하지만 이는 rank 함수와 약간의 차이점이 존재합니다.

바로 숫자의 중복이 되질 않는다는 점입니다.

예제를 통해서 한번 오라클 rank 함수에 대해 배워보겠습니다.

오라클 rank

다음과 rownum과 order by를 이용하여 순위를 구한 모습인데요.

김여섯과 김둘은 나이가 같음에도 불구하고 4위와 5위로 나뉘어 버렸습니다.

이를 개선하기 위해선 아래와 같은 rank 방법을 써야 합니다.

1. RANK 사용방법


oracle rank1

오라클 순위 함수인 rank  함수를 이용한 모습인데요.

둘 다 4위가 되었고, 4위 다음의 김하나는 5위가 아닌 6위가 되었습니다.

2. 숫자 밀림 방지

위의 예제에서 2개의 4위 다음에 6위가 오게 되는데 이를 무시하는 방법이 있습니다.

몇 개의 순위가 중복되더라도 해당 숫자의 다음 순위 오게 하려면 dense_rank()를 사용하면 됩니다.

oracle rank

위의 예제 실행 결과 다음과 같이 2개의 4위 다음에 5위가 나오게 되었습니다.

3. 그룹별 순위

지정된 부서나 소속이 있으면 이를 그룹화 시킨 후 순위를 구할 때 사용하게 됩니다.


oracle rank3

위와 같이 partition by를 이용하여 JOB을 그룹화시켰고 해당 그룹에 대한 순위가 매겨졌습니다.


출처: http://ontheinfo.com/2803