IT 소스/MariaDB

[MariaDB] 순위 함수 (ROW_NUMBER, DENSE_RANK, RANK)

한량이야기 2023. 1. 5. 09:07
반응형

안녕하세요. 경제적, 시간적 자유를 꿈꾸는 한량입니다.

 

예문 테이블을 가지고 순위 함수가 어떻게 동작하는지 알아보겠습니다. 

CREATE TABLE STUDENT (NAME VARCHAR(10), SCORE int);

INSERT INTO STUDENT VALUES 
  ('BILL', 60),
  ('KIM', 50),
  ('ROSE', 70),
  ('SALLY', 60),
  ('NANCY', 90),
  ('RICHARD', 70),
  ('AMY', 80),
  ('GABRIEL', 70);

1. ROW_NUMBER ()

'ROW'별로 순차적으로 번호를 부여합니다. 

즉, 동일한 번호는 존재하지 않고 모든 행은 다른 번호를 부여받습니다.

SELECT 
     ROW_NUMBER() OVER (ORDER BY SCORE DESC) AS ROW_NUM
   , NAME
   , SCORE 
FROM STUDENT;

ROW_NUM|NAME   |SCORE|
-------+-------+-----+
      1|NANCY  |   90|
      2|AMY    |   80|
      3|GABRIEL|   70|
      4|RICHARD|   70|
      5|ROSE   |   70|
      6|SALLY  |   60|
      7|BILL   |   60|
      8|KIM    |   50|

2. DENSE_RANK ()

동일 점수는 같은 등수로 순위를 정합니다.

하지만 그다음 등수를 동일점수의 수만큼 제외하지 않고 순위를 배정합니다.

SELECT 
     DENSE_RANK() OVER (ORDER BY SCORE DESC) AS ROW_NUM
   , NAME
   , SCORE 
FROM STUDENT;

ROW_NUM|NAME   |SCORE|
-------+-------+-----+
      1|NANCY  |   90|
      2|AMY    |   80|
      3|GABRIEL|   70|
      3|RICHARD|   70|
      3|ROSE   |   70|
      4|SALLY  |   60|
      4|BILL   |   60|
      5|KIM    |   50|

3. RANK ()

동일 점수는 같은 등수로 순위를 정합니다.

하지만 그다음 등수를 동일점수의 수만큼 제외하고 순위를 배정합니다.

SELECT 
     RANK() OVER (ORDER BY SCORE DESC) AS ROW_NUM
   , NAME
   , SCORE 
FROM STUDENT;

ROW_NUM|NAME   |SCORE|
-------+-------+-----+
      1|NANCY  |   90|
      2|AMY    |   80|
      3|GABRIEL|   70|
      3|RICHARD|   70|
      3|ROSE   |   70|
      6|SALLY  |   60|
      6|BILL   |   60|
      8|KIM    |   50|

4. NTILE (숫자)

전체적인 순위를 숫자만큼으로 제한합니다.

SELECT 
     NTILE(3) OVER (ORDER BY SCORE DESC) AS ROW_NUM
   , NAME
   , SCORE 
FROM STUDENT;

ROW_NUM|NAME   |SCORE|
-------+-------+-----+
      1|NANCY  |   90|
      1|AMY    |   80|
      1|GABRIEL|   70|
      2|RICHARD|   70|
      2|ROSE   |   70|
      2|SALLY  |   60|
      3|BILL   |   60|
      3|KIM    |   50|

 

반응형

'IT 소스 > MariaDB' 카테고리의 다른 글

[MariaDB] DML, DDL, DCL 이란?  (0) 2023.01.09
[MariaDB] 조회 쿼리 - SELECT  (0) 2023.01.06
[MariaDB] 시스템 함수  (0) 2023.01.04
[MariaDB] 날짜와 시간 형식화 (DATE_FOMAT)  (0) 2023.01.03
[MariaDB] 날짜와 시간 함수  (0) 2023.01.02