DB/MySQL

[MySQL] DENSE_RANK() 함수

동호다찌 2023. 1. 17. 11:07
반응형

순위함수(분석함수)

결과에 순번, 순위를 매기는 함수

비집계함수  RANK, NTILE, DENSE_RANK, ROW_NUMBER 등이 해당된다.

SELECT
<순위함수이름> (arguments)
OVER ([PARTITION BY <partion_by_list>]
ORDER BY <order_by_list>)
FROM 테이블명;

PARTITION BY : 동일 그룹으로 묶어줄 칼럼 명 지정

ORDER BY : Partition 정의에 지정된 컬럼에 대한 정렬 수행


DENSE_RANK() 함수

DENSE_RANK()는 RANK() 함수와 유사합니다. 하지만 RANK() 함수가 숫자를 뛰어넘었던 것에 반해 해당 함수는 숫자를 뛰어넘지 않고 순위를 부여합니다.


-- 인구수가 많은 순서대로 랭킹 지정하기
SELECT c.*, DENSE_RANK() OVER(ORDER BY Population DESC) AS rnk
  FROM city c ;

London과 Delhi의 랭킹은 7,285,000로 동일해서 dense_rank_number 열에 13이라는 순위를 부여해줬습니다.

 

7,285,000 다음의 값인 6,789,479에게 순위를 부여할 땐 이전 순위에서 13을 2개나 부여했음에도 불구하고 숫자를 뛰어넘지 않고 13 다음의 숫자인 14라는 순위를 부여해줬습니다.

 

구분막(파티션) 내의 순위 부여하기

-- 도시코드별 인구수 랭킹 지정하기 
SELECT c.*, DENSE_RANK() OVER(PARTITION BY CountryCode ORDER BY Population DESC) AS rnk
  FROM city c ;

반응형

'DB > MySQL' 카테고리의 다른 글

[MySQL] LEAD() 함수  (0) 2023.01.17
[MySQL] ROW_NUMBER() 함수  (0) 2023.01.17
[MySQL] RANK() 함수  (0) 2023.01.17
[MySQL] 쿼리 작성 및 최적화  (0) 2022.11.22
[MySQL] 쿼리문 통계(일간/주간/월간/기간별), DATE_FORMAT()  (0) 2022.11.11