메뉴 건너뛰기

조회 수 15 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

SQL Server에서 RANK 함수를 사용하는 방법을 알아보겠습니다.

RANK 함수를 사용해 상위 몇 위까지만 출력하는 예제도 보겠습니다.

 

데이터를 취득하기 위해 먼저 예제 테이블과 데이터를 준비하겠습니다.

 

  테스트 데이터 만들기

랭크 예제는 성적 테이블을 만들어 사용하도록 하겠습니다.

 

데이블 생성

-- 성적 테이블 작성
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)

 

  RANK 함수

점수를 기준으로 순위를 취득하기 전에 먼저 RANK 함수에 대해 간단히 살펴보겠습니다.

RANK ( ) OVER ( [ PARTITION BY 컬럼 ] ORDER BY 컬럼 )

파라미터 PARTITION BY 컬럼은 취득하고 싶은 레코드를 그룹화할 때 사용합니다.

파라미터 ORDER BY 컬럼은 어떠한 항목으로 순위를 지정할지 설정하는 부분으로 반드시 설정을 해야 합니다.

 

RANK 사용 예제

-- 학생 성적을 기준으로 순위 취득
SELECT
	RANK() OVER(ORDER BY SCORE DESC) AS SCORE_RANK,
	STUDENT_ID,
	STUDENT_NAME,
	SCORE
FROM
	STUDENT_GRADE
ORDER BY
	SCORE_RANK

결과

랭크 결과

 

성적 점수를 기준으로 순위를 취득했습니다.

RANK 함수는 같은 값이 있을 경우에는 순위가 같게 표시됩니다.

출력된 결과를 보면 학생 ID가 10번인 학생과 1번인 학생 성적 점수가 같습니다.

점수가 동일하기 때문에 10등은 2번 표시되었습니다.

그리도 다음 학생의 등수는 12등으로 표시되었습니다.

 

  상위 랭크만 취득

이번에는 등수가 높은 상위랭크만 출력하는 예제를 보겠습니다.

상위 랭크 취득 예제

-- 10위 까지 취득
SELECT
	SCORE_RANK,
	STUDENT_ID,
	STUDENT_NAME,
	SCORE
FROM
	-- RANK 함수로 순위를 취득하는 서브 쿼리
	(
	SELECT
		RANK() OVER(ORDER BY SCORE DESC) AS SCORE_RANK,
		STUDENT_ID,
		STUDENT_NAME,
		SCORE
	FROM
		STUDENT_GRADE
	) AS STUDENT_GRADE
	-- WHERE 조건문에서 10위 까지만 취득하도록 조건 설정
WHERE
	SCORE_RANK <= 10
	ORDER BY
	SCORE_RANK

결과

랭크 10위 결과

 

상위 10위까지만 취득해 결과를 출력하고 있습니다.

예제 내용을 보면 서브 쿼리에서 RANK를 사용하여 전체 학생의 순위를 취득합니다.

취득한 학생의 순위 중 조건문인 WHERE 문에서 10등까지만 취득하고 있습니다.


List of Articles
번호 제목 날짜 조회 수
30 MSSQL EXISTS로 서브 쿼리 작성 방법 예제 file 2022.02.16 20
29 MSSQL IN 다중조건 사용 방법 2022.02.16 182
28 MSSQL 테이블 작성 인덱스 생성 하기 file 2022.02.16 53
27 MSSQL CLUSTERED INDEX와 NONCLUSTERED INDEX 차이점 2022.02.16 16
26 MSSQL Primary Key 컬럼 속성 변경 안될때 해결 방법 file 2022.02.16 23
25 MSSQL 컬럼 추가, 변경, 삭제 ALTER 사용 방법 예제 file 2022.02.16 19
24 MSSQL 컬럼 중간에 추가하는 방법 file 2022.02.16 186
23 MSSQL RANK와 DENSE_RANK 랭크 함수 차이 예제 file 2022.02.16 14
22 MSSQL ROW_NUMBER로 성적 순위 설정 방법 예제 file 2022.02.16 9
» MSSQL 성적 순위 설정 RANK 사용 방법 예제 file 2022.02.14 15
20 MSSQL 간단한 만나이 계산하기 DATEDIFF 사용 예제 file 2022.02.14 266
19 MSSQL 현재 시간 취득하는 여러 가지 방법 file 2022.02.14 14
18 MSSQL NULL값 변환 (NVL, ISNULL, CASE) 사용 방법 예 file 2022.02.14 134
17 MSSQL 공백값과 NULL값 동시에 체크 하는 방법 file 2022.02.14 1000
16 MSSQL 앞에 숫자0 채우기 FORMAT 사용 2022.02.14 86
15 MSSQL 숫자 3자리 콤마 넣기 또는 삭제하기 2022.02.14 56
14 MSSQL MERGE사용 안하고 있으면 UPDATE 없으면 INSERT 하기 2022.02.14 78
13 MSSQL MERGE 테이블에 있으면 업데이트 없으면 추가 하기 2022.02.14 10
12 MSSQL 문자열에서 숫자 또는 문자만 추출하기 REPLACE, PATINDEX 2022.02.14 671
11 MSSQL 모든 테이블 사용하고 있는 용량 확인 방법 2022.02.14 35
Board Pagination Prev 1 2 Next
/ 2

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved