Mysql rank함수

정재현·2022년 2월 14일

sns웹 페이지를 만들면서 페이지 내 포인트와 랭킹을 구현하는데 rank함수를 사용해 봤다.

over(order by, partition by...)

groupby나 서브쿼리를 사용하지 않고 집계 함수나 분석 함수를 사용할 수 있다.
rank, dense_rank는 orderby가 필수이다.

rank함수

mysql 8버전 이상에서 사용가능.

사용할 테이블

1. rank()

  • 같은 점수를 가질 때 같은 순위를 가진다.
  • 같은 순위를 가지는 다음 데이터는 겹치는 데이터를 포함한 다음 순위를 가진다.
select id, rank() over (order by point desc) as 'rank' from user;

결과

2. dense_rank()

rank()와 비교해 보면
공통점

  • 같은 점수를 가지면 같은 순위를 가진다.

차이점

  • 같은 순위를 가지는 데이터 다음 순위는 +1해서 이어간다.
select id, dense_rank() over (order by point desc) as 'rank' from user;

결과

3. 원하는 id의 ranking을 가져오기

select id, dense_rank() over (order by point desc) as 'ranking' from user
) rank_table where rank_table.id = 9;

서브쿼리를 사용해서 테이블을 만들어주고 where로 검색.

결과

profile
back end개발자로 성장하기

0개의 댓글