반응형
안녕하세요. 경제적, 시간적 자유를 꿈꾸는 한량입니다.
예문 테이블을 가지고 순위 함수가 어떻게 동작하는지 알아보겠습니다.
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 |