DB 자료 중에 숫자로 되어 있는 값을 토대로 순위를 매겨야 할 경우 오라클 rank 함수를 사용하면 됩니다.
하지만 오라클에서 순위를 구할 때 order by 또는 rownum 사용할 수가 있는데요. 하지만 이는 rank 함수와 약간의 차이점이 존재합니다.
바로 숫자의 중복이 되질 않는다는 점입니다.
예제를 통해서 한번 오라클 rank 함수에 대해 배워보겠습니다.
다음과 rownum과 order by를 이용하여 순위를 구한 모습인데요.
김여섯과 김둘은 나이가 같음에도 불구하고 4위와 5위로 나뉘어 버렸습니다.
이를 개선하기 위해선 아래와 같은 rank 방법을 써야 합니다.
1. RANK 사용방법
SELECT RANK() OVER (ORDER BY [대상 컬럼명] 정렬방법
오라클 순위 함수인 rank 함수를 이용한 모습인데요.
둘 다 4위가 되었고, 4위 다음의 김하나는 5위가 아닌 6위가 되었습니다.
2. 숫자 밀림 방지
위의 예제에서 2개의 4위 다음에 6위가 오게 되는데 이를 무시하는 방법이 있습니다.
몇 개의 순위가 중복되더라도 해당 숫자의 다음 순위 오게 하려면 dense_rank()를 사용하면 됩니다.
위의 예제 실행 결과 다음과 같이 2개의 4위 다음에 5위가 나오게 되었습니다.
3. 그룹별 순위
지정된 부서나 소속이 있으면 이를 그룹화 시킨 후 순위를 구할 때 사용하게 됩니다.
SELECT RANK() OVER (PARTITION BY [그룹 지을 대상 컬럼] ORDER BY [대상 컬럼명] 정렬방법
위와 같이 partition by를 이용하여 JOB을 그룹화시켰고 해당 그룹에 대한 순위가 매겨졌습니다.
답글 남기기