데이터에 번호를 설정하는 방법으로 ROW_NUMBER를 많이 사용합니다.
순위를 설정하는 방법으로 RANK 함수를 사용할 수도 있지만, ROW_NUMBER를 사용해 순위를 설정할 수도 있습니다.
성적 순서가 높은 순서대로 ROW_NUMBER를 사용해 순위를 설정하는 방법을 보겠습니다.
먼저 테스트 데이블과 데이터를 만들겠습니다.
테스트 데이터 만들기
랭크 예제는 성적 테이블을 만들어 사용하도록 하겠습니다.
데이블 생성
-- 성적 테이블 작성
CREATE TABLE STUDENT_GRADE
(
STUDENT_ID int NOT NULL,
STUDENT_NAME nvarchar(20) NOT NULL,
SCORE int NOT NULL,
CONSTRAINT [PK_STUDENT_GRADE] PRIMARY KEY CLUSTERED
(
STUDENT_ID ASC
)
) ON [PRIMARY]
데이터 입력
-- 학생 성적 데이터 입력
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (1, N'이름 1', 391)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (2, N'이름 2', 489)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (3, N'이름 3', 437)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (4, N'이름 4', 339)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (5, N'이름 5', 493)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (6, N'이름 6', 361)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (7, N'이름 7', 470)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (8, N'이름 8', 456)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (9, N'이름 9', 417)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (10, N'이름 10', 391)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (11, N'이름 11', 461)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (12, N'이름 12', 298)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (13, N'이름 13', 443)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (14, N'이름 14', 426)
INSERT INTO STUDENT_GRADE (STUDENT_ID, STUDENT_NAME, SCORE) VALUES (15, N'이름 15', 383)
ROW_NUMBER 순위 설정
바로 예제를 보도록 하겠습니다.
ROW_NUMBER 순위 예제
-- 성적을 기준으로 번호를 설정
SELECT
ROW_NUMBER() OVER(ORDER BY SCORE DESC) AS SCORE_ROW_NUMBER,
STUDENT_ID,
STUDENT_NAME,
SCORE
FROM
STUDENT_GRADE
ORDER BY
SCORE_ROW_NUMBER
결과

점수가 높은 순서로 순위를 정해 출력하고 있습니다.
같은 점수가 있는 경우에도 순위가 따로 정해집니다.
위 결과를 보면 10번 학생과 1번 학생 점수는 같습니다.
하지만 둘 중 한 명만 10등이 되고 다른 한 명은 11등으로 정해집니다.
만약 같은 점수가 있는 경우 같은 등수로 순위를 정하고 싶다면 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, CONSTRAINT PRIMAR...
상위 랭크만 출력
이번에는 지정한 순위까지만 출력하는 방법을 보겠습니다.
상위 랭크 예제
-- 상위 10위 까지 취득
SELECT
SCORE_ROW_NUMBER,
STUDENT_ID,
STUDENT_NAME,
SCORE
FROM
-- 점수로 순위를 지정하는 서브쿼리
(
SELECT
ROW_NUMBER() OVER(ORDER BY SCORE DESC) AS SCORE_ROW_NUMBER,
STUDENT_ID,
STUDENT_NAME,
SCORE
FROM
STUDENT_GRADE
) AS STUDENT_GRADE
-- WHERE 조건문에서 10위 까지만 취득하도록 조건 설정
WHERE
SCORE_ROW_NUMBER <= 10
ORDER BY
SCORE_ROW_NUMBER
결과

ROW_NUMBER를 사용해 점수로 순위를 지정하고 상위 10명까지만 출력하고 있습니다.
댓글