MySQL 랭킹(순위) 매기는 3가지 방법

유석현(SeokHyun Yu)·2023년 10월 11일
0

정보

목록 보기
9/9
post-thumbnail

1. 실행환경 준비

먼저 students 테이블을 생성하고, 해당 테이블에 몇몇 학생들의 이름과 점수를 추가하는 쿼리를 실행하여 실행 환경을 만들어보자.


  1. 테이블 생성
CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    score INT NOT NULL
);

  1. 데이터 삽입
INSERT INTO students (name, score) VALUES ('김영희', 85);
INSERT INTO students (name, score) VALUES ('이철수', 90);
INSERT INTO students (name, score) VALUES ('박지민', 95);
INSERT INTO students (name, score) VALUES ('최수진', 90);
INSERT INTO students (name, score) VALUES ('장민호', 88);

이제 ROW_NUMBER(), RANK(), DENSE_RANK() 함수를 사용한 쿼리를 실행하면, 각 학생의 이름과 점수, 그리고 해당 점수에 따른 순위를 확인할 수 있다.


2. 순위 매기기

  1. ROW_NUMBER()
    • 각 행에 고유한 순위를 할당한다.
    • 동일한 값이 있더라도 다른 순위를 부여한다.
     SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) as ranking
     FROM students;


  1. RANK()
    • 동일한 값의 행에는 동일한 순위를 할당하며, 그 다음 순위는 건너뛴다.
    • 예를 들어, 순위가 1, 2, 2, 4로 표시될 수 있다.
     SELECT name, score, RANK() OVER (ORDER BY score DESC) as ranking
     FROM students;


  1. DENSE_RANK()
    • 동일한 값의 행에는 동일한 순위를 할당한다.
    • 다음 순위는 건너뛰지 않고 연속적으로 부여된다.
    • 예를 들어, 순위가 1, 2, 2, 3으로 표시될 수 있다.
    • 예시:
     SELECT name, score, DENSE_RANK() OVER (ORDER BY score DESC) as ranking
     FROM students;

profile
Backend Engineer

0개의 댓글