IT

[oracle] RANK(), DENSE_RANK(), ROW_NUMBER() 함수 간단 비교

생각파워 2020. 2. 12. 17:51

오라클에서 RANK(), DENSE_RANK(), ROW_NUMBER() 함수는 모두 순위를 정하는 함수입니다. 

비슷한 방식으로 돌아가지만 아주 약간 결과 값이 다르게 출력됩니다. 

 

 

성적 테이블에 위와 같이 성적이 입력돼 있습니다. 

랭킹을 출력해 보겠습니다. 

 

 

SCORE가 큰 순서대로 1,2,3등이 부여되는 쿼리입니다. 

아래와 같이 결과 값이 나옵니다.

 

그림으로 이해하는게 제일 나을것 같습니다.

 

RANK 함수

SCORE가 같으면 같은 등수를 부여하고, 다음 SCORE는 이전까지 등수를 결정한 학생들 수 + 1의 등수를 매깁니다.

김태호, 박나래가 공동 2등이고, 3등을 건너뛰고 장도연에게 4등을 부여했습니다. 

2등이 세명이라면 장도연은 5등이 됐겠죠.

 

DENSE_RANK 함수

SCORE가 같으면 같은 등수를 부여하고, 같은 등수가 몇명이든지 다음 SCORE는 바로 다음 등수를 매깁니다. 

김태호, 박나래가 공동 2등이고, 장도연은 바로 다음등수인 3등이 부여됐죠.

2등이 100명이라도 장도연은 3등입니다. 

참고로 DENSE가 '밀집한'이라는 뜻을 가지고 있네요.

1,2,3등이 어떻게 분포돼 있는지 알려면 1,2,3등이 몇명이든 순서대로 부여되어야 하겠네요.

 

ROW_NUMBER 함수

ROW_NUMBER 함수는 ROW별로 번호를 매깁니다. 

SCORE로 정렬을 하긴 했지만, SCORE와 상관없이 SORT 되는 순서대로 번호가 매겨지죠.

 

 

 

 

 

 

 

반응형