개발/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
반응형