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
'programing' 카테고리의 다른 글
이 이상한 글자들을 어떻게 변환하죠?( (, ,, ,, (, (, )) (0) | 2022.09.27 |
---|---|
json_forwards() 이스케이프 슬래시 (0) | 2022.09.27 |
여러 값을 반환하려면 어떻게 해야 합니까? (0) | 2022.09.26 |
InnoDB 교착 로그 이해 (0) | 2022.09.26 |
Buefy, Vuex, Toast: 선언 파일을 찾을 수 없습니다. (0) | 2022.09.26 |