SQL Server에서 순위를 설정하는 함수로 RANK가 있습니다.
비슷한 함수로 DENSE_RANK도 있습니다.
두 함수의 사용법은 비슷하지만 결과가 조금 다른 경우가 있습니다.
예제를 통해서 결과가 어떻게 다른지 확인하겠습니다.
RANK와 DENSE_RANK 차이
두 함수의 차이를 확인하기 전에 테스트 데이터를 만들겠습니다.
데이터는 앞서 설명한 RANK 함수에서 사용한 데이터를 가지고 하겠습니다.
테이블 생성 및 데이터 등록은 RANK 함수의 데이터 등록을 참조해주세요.
MSSQL 성적 순위 설정 RANK 사용 방법 예제
SQL Server에서 RANK 함수를 사용하는 방법을 알아보겠습니다. RANK 함수를 사용해 상위 몇 위까지만 출력하는 예제도 보겠습니다. 데이터를 취득하기 위해 먼저 예제 테이블과 데이터를 준비하겠습니다. 테스트 데이터 만들기 랭크 예제는 성적 테이블을 만들어 사용하도록 하겠습니다. 데이블 생성 -- 성적 테이블 작성 CREATE TABLE STUDENT_GRADE ( STUDENT_ID int NOT NULL, STUDENT_NAME nvarchar(20) NOT NULL, SCORE int NOT NULL, CONSTRAIN...
RANK 사용 예제
-- 학생 성적을 기준으로 순위 취득
SELECT
RANK() OVER(ORDER BY SCORE DESC) AS SCORE_RANK,
STUDENT_ID,
STUDENT_NAME,
SCORE
FROM
STUDENT_GRADE
ORDER BY
SCORE_RANK
결과
DENSE_RANK 사용 예제
-- 학생 성적을 기준으로 순위 취득
SELECT
DENSE_RANK() OVER(ORDER BY SCORE DESC) AS SCORE_RANK,
STUDENT_ID,
STUDENT_NAME,
SCORE
FROM
STUDENT_GRADE
ORDER BY
SCORE_RANK
결과
RANK와 DENSE_RANK 결과를 보면 크게 차이는 없습니다.
차이가 있는 곳은 성적이 같은 값일 경우에 결과가 다릅니다.
RANK로 순위를 설정한 결과에서는 10번 학생과 1번 학생의 성적이 같기 때문에 둘 다 10등로 순위가 설정되었습니다.
그리고 11등은 건너뛰고 다음 학생은 12등부터 다시 시작합니다.
DENSE_RANK 함수의 경우에는 10번 학생과 1번 학생 둘 중 한 명은 10등 다른 한 명은 11등으로 표시됩니다.
정리
RANK와 DENSE_RANK 함수를 사용해서 순위를 설정한 결과와 차이점을 확인했습니다.
RANK의 경우에는 같은 값이 있는 경우에는 같은 랭크를 지정하지만 DENSE_RANK 경우에는 같은 값이 있어도 같은 랭크가 아닌 순서대로 랭크를 설정합니다.
댓글