MSSQL RANK와 DENSE_RANK 랭크 함수 차이 예제

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

 

결과

 

RANKDENSE_RANK 결과를 보면 크게 차이는 없습니다.

차이가 있는 곳은 성적이 같은 값일 경우에 결과가 다릅니다.

RANK 순위를 설정한 결과에서는 10번 학생과 1번 학생의 성적이 같기 때문에 둘 다 10등로 순위가 설정되었습니다.

그리고 11등은 건너뛰고 다음 학생은 12등부터 다시 시작합니다.

DENSE_RANK 함수의 경우에는 10번 학생과 1번 학생 둘 중 한 명은 10등 다른 한 명은 11등으로 표시됩니다.

 

정리

RANKDENSE_RANK 함수를 사용해서 순위를 설정한 결과와 차이점을 확인했습니다.

RANK의 경우에는 같은 값이 있는 경우에는 같은 랭크를 지정하지만 DENSE_RANK 경우에는 같은 값이 있어도 같은 랭크가 아닌 순서대로 랭크를 설정합니다.

댓글