반응형
환경: 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
반응형
'개발 > sql' 카테고리의 다른 글
DB isolation level (0) | 2024.05.22 |
---|---|
[mysql] merge into..? (0) | 2024.05.17 |
[DB] 분산환경에서 데이터 저장소 선택과 활용 (0) | 2023.07.24 |
[형상관리] flyway vs liquibase (0) | 2022.07.08 |
[mysql] jsonpath (0) | 2022.05.27 |