[MySQL] RANK() 로 구현하는 순위 계산

View 테이블을 사용하여 현재 특정 데이터들에 대한 순위를 계산해야하는 경우가 있었다. MySQL의 경우에는 RANK() 함수가 5.7버전부터 추가되어 특정 칼럼에 대해 값의 순위를 계산할 때 사용할 수 있다.

 

RANK() 함수 사용 예시

사용시 문법은 다음과 같다.

RANK() OVER (PARTITION BY [구분하려는 칼럼명] ORDER BY [정렬하려는 칼럼명] DESC/ASC)

해당 함수 사용시 PARTITION BY와 DESC/ASC는 생략이 가능하다.

 

PARTION BY

PARTITION BY는 특정 동일한 제약이 걸린 데이터 끼리의 순위를 얻고 싶을 때 사용가능하다. 예를 들어 근무 시간 테이블에서 지점명 A에 소속된 직원들의 근무 시간에 대해서만 순위를 얻고 싶다면 PARTITION BY working_hour.branch_id 와 같이 작성하여 특정 지점에 대해서만 조건을 걸 수 있다. 

 

ORDER BY

ORDER BY는 어떤 데이터 값으로 순위를 얻을 건지를 지정할 때 사용한다. 위와 동일한 예시에서 살펴보면 근무 시간에 대해 순위를 얻는 부분은 ORDER BY에서 처리한다. 내림차순으로 순위를 얻고 싶다면 DESC, 올림차순으로 순위를 얻고 싶다면 ASC를 추가하면 된다.

 

ETC)

RANK 함수의 경우, 공동 순위가 생긴다면 뛰어넘기 때문에 공동 순위를 뛰어넘지 않게 통계를 내야할 때는 DENSE_RANK 함수를 사용해야 한다.

예시) RANK → 1,2,3,3,5....

        DESE_RANK → 1,2,3,3,4....

'개발 > MySQL' 카테고리의 다른 글

AWS RDS MySQL 마이그레이션 체크 사항  (0) 2022.08.25