programing

2개의 열을 기준으로 한 순위

luckcodes 2022. 9. 27. 00:00

2개의 열을 기준으로 한 순위

3개의 열을 비교하여 데이터베이스에서 특정 사용자의 순위 검색.

이름 | 점수 | 시행 횟수 | 시간테스트 | 2 | 4 | 2019-01-29 19:50:11tes2 | 2 | 1 | 2019-01-29 20:14:11

따라서 예상되는 출력은

이름 | 점수 | 시행 횟수 | 시간 | 순위tes2 | 2 | 1 | 2019-01-29 20:14:11 | 1테스트 | 2 | 4 | 2019-01-29 19:50:11 | 2

랭크에서 사용자 '테스트'를 검색하려면 답으로 랭크 2를 얻어야 합니다.

전체 랭크를 취득할 수 있는 부분은 하고 있습니다만, 개인 유저의 랭크를 찾을 수 없었습니다.

이것은 내가 전체 순위를 얻기 위해 작성한 코드이다.

select t.*, @r := @r + 1 as `new_rank`
from  tbl t,
(select @r := 0) r
order by `Rank` asc, `Tasks` desc`

사용하고 있는 SQL 버전은 10.1.9-Maria입니다.DB

사용하다row_number()또는rank()넥타이를 어떻게 처리하느냐에 따라 달라집니다.예:

select t.*, row_number() over (order by rank asc, task desc) as new_rank
from t;

이전 버전의 MySQL을 사용하는 경우(코드 스니펫에서 알 수 있음) 변수를 사용할 수 있지만 하위 쿼리가 필요할 수 있습니다.

select t.*, (@r := @r + 1) as new_rank
from (select t.* from tbl t order by Rank asc, Tasks desc) t cross join
     (select @r := 0) r;

특정 행을 가져오는 한 가지 방법:

select t.*
from (select t.*, (@r := @r + 1) as new_rank
      from (select t.* from tbl t order by Rank asc, Tasks desc) t cross join
           (select @r := 0) r
     ) t
where t.name = ?;

dense_rank를 사용하면 숫자 순서대로 순위를 매길 수 있습니다.

*Syntax : 
    DENSE_RANK() OVER (
       [ PARTITION BY partition_expression ]
       [ ORDER BY order_list ]
    )* 

select t.*, dense_rank() over (order by rank asc, task desc) as new_rank
from t;

언급URL : https://stackoverflow.com/questions/54426058/ranking-based-on-two-columns