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

justice·2024년 7월 6일

SQL

목록 보기
1/3

PARTITION BY

ORDER BY

1. RANK() OVER() 함수

RANK : 중복 값 있을 때, 순위 건너 뛰고 다음 순위 부여
ex) a,b,b,c => 1,2,2,4

사용 형식

  • RANK() OVER(ORDER BY [컬럼명] ASC|DESC)

관련 문제

프로그래머스 - 대장균 크기에 따라 분류하기 2
문제 풀기

-- => ID, COLONY_NAME(분류된 이름)
-- ID 오름차순
SELECT ID, CASE
    WHEN R<= CNT*0.25 THEN 'CRITICAL'
    WHEN R<= CNT*0.5 THEN 'HIGH'
    WHEN R<= CNT*0.75 THEN 'MEDIUM'
    ELSE 'LOW'
    END AS COLONY_NAME
FROM (
    SELECT ID, 
        RANK() OVER(ORDER BY SIZE_OF_COLONY DESC) AS R,
        (SELECT COUNT(*) FROM ECOLI_DATA) AS CNT
    FROM ECOLI_DATA
) AS E
ORDER BY ID

2. DENSE_RANK() OVER() 함수

DENSE_RANK : 중복 값 있을 때, 연속된 순위 부여
ex) a,b,b,c => 1,2,2,3

사용 형식

  • DENSE_RANK() OVER(ORDER BY [컬럼명] ASC|DESC)

3. ROW_NUMBER() OVER() 함수

ROW_NUMBER : 중복 값 상관없이, 순차적인 순위 부여
ex) a,b,b,c => 1,2,3,4

사용 형식

  • ROW_NUMBER() OVER(ORDER BY [컬럼명] ASC|DESC)

0개의 댓글