개발/sql
[mysql] 유저의 등수 구하기 rank under v8
방푸린
2024. 2. 6. 13:51
반응형
환경: mysql 5.7
mysql 8버전부터 rank over 함수가 들어오면서 드디어! 편한 함수의 세상이 열리긴 한다만..
아직 5.7을 사용하고 있기에 그 이하 버전에 등수를 구하는 방법을 알아야 한다.
서버에 부하가 가지 않고 제일 좋은 방법은 집계할 때 등수를 같이 쌓아주어 그냥 select 해가면 되는 것이지만..
서버는 그닥 user-friendly 하지 않다. 그리고 기획자는 서버에 없는 것만 요청한다..
1. count 사용 서브쿼리
select * from (
select
(select count(*) +1 from table for_rank where for_rank.start_date ='2023-02-06' and for_rank.prize_total > this.prize_total) as r,
this.*
from table this
where this.start_date ='2023-02-06'
order by prize_total desc
) as with_rank
where id = 'tbot0275'
2. @사용자 정의 변수 사용
select * from (
select (@rank := @rank +1) as r,
this.*
from table this, (select @rank := 0) as ranking
where this.start_date ='2023-02-06'
order by prize_total desc
)as weekly_with_rank
where id = 'tbot0275'
허나 두 쿼리의 결과가 다를 수 있다. 왜냐면 동점자를 다루는 방식이 다르기 때문.
위 이미지에서처럼 1번의 경우 동점자를 같은 등수로 치게 되고 2번의 경우는 어쨌건 한 줄 서기라 조회에 따라 랜덤 하게 등수가 나올 수 있다.
728x90
반응형