본문 바로가기

Database/MySQL

[SQL] RANK(), DENSE_RANK()

 

* RANK()

동일한 순위가 부여된 경우, 다음 순위를 건너뛴다.

 

 * DENSE_RANK()

동일한 순위가 부여된 경우, 다음 순위를 건너뛰지 않고 연속적으로 부여한다..

 

ex) 

SELECT 
    seq,
    total_sales,
    RANK() OVER (ORDER BY total_sales DESC) AS rank,
    DENSE_RANK() OVER (ORDER BY total_sales DESC) AS dense_rank
FROM 
    sales;

 

결과는 아래와 같다.

seq
total_sales rank dense_rank
1 700 1 1
2 500 2 2
3 500 2 2
4 300 4 3
5 300 4 3

 

=> 동일한 값 2번, 3번에 대해 동일한 순위 2를 부여.

RANK() 는 중복된 데이터 수만큼 순위를 건너뛰어서, 다음 순위가 4가 됨.

DENSE_RANK() 는 순위를 건너뛰지 않고 다음 순위가 3이 됨.