MYSQL) RANK 함수

kiki·2024년 8월 7일
0

기본기

목록 보기
6/8

RANK 함수는 말 그대로 순위를 매기는 함수이다.

RANK() OVER([PARTITION BY COLUMN_1] ORDER BY COLUMN_2 [DESC])

위와 같이 사용되는데, 여기서 파티션은 그룹별로 그룹 내에서 랭킹을 매길 때 사용한다.

나같은 경우는 해당 문제를 풀다가 RANK에 대해 찾아보게 됐는데, 여기서는 SIZE에 대해서 상위 25%, 25%~50% 와 같이 SIZE별로 구간을 나눌 필요가 있었다.

RANK() OVER(ORDER BY SIZE_OF_COLONY DESC)와 같이 사용했다.

다른 랭킹 함수

  • DENSE_RANK

RANK와 같이 중복되는 수에 대해서 같은 순위를 할당하나, 다음 순위는 건너뛰지 않는다.

ex) 월급이 300으로 동일한 데이터가 있을 때, 이 두 데이터엔 23위라는 순위를 할당하고 다음 데이터인 280에 대해 24위를 할당한다.

  • ROW_NUMBER

RANK, DENSE_RANK와 달리 중복되는 값에 대해 같은 순위를 할당하지 않고, 모든 데이터가 고유한 순위를 갖는다.

ex) 월급이 300으로 동일한 데이터가 있을 때, 두 데이터에 각각 23위, 24위라는 순위를 할당한다. 동일한 값의 데이터에 대해선 데이터의 물리적 위치에 따라 순위가 결정됨

  • PERCENT_RANK

ORDER BY에 따라 백분위수 순위를 구하는 함수이다. 즉 0~1 사이의 값을 가짐.
ORDER에 따라 0부터 PERCENT RANK를 가짐. 즉 데이터가 어떤 수치에 있어 상위 몇퍼센트인지 확인하고 싶을 때 사용한다.
(rank - 1) / (total_rows - 1)로 계산된다.

OVER은 무엇인가?

윈도우 함수(또는 분석 함수)와 함께 사용되어 특정 파티션이나 전체 데이터 집합에 대해 계산을 수행할 수 있도록 합니다. by Chat GPT

rank와 같은 윈도우 함수와 같이 사용되며, count, sum과 같은 집계 함수와도 함께 사용된다.

예시) ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC, employee_id)

위 쿼리는 부서별로 그룹화해(PARTITION BY) 연봉을 기준으로 내림차순 정렬하고 사원 번호로 오름차순 정렬해(ORDER BY) 고유한 순위로 rank를 매긴다(ROW_NUMBER).

0개의 댓글