通过比较三列从数据库中查找特定用户的排名。
Name | Score | Attempts | Time test | 2 | 4 | 2019-01-29 19:50:11 tes2 | 2 | 1 | 2019-01-29 20:14:11
So the Expected Output should be
Name | Score | Attempts | Time | Rank tes2 | 2 | 1 | 2019-01-29 20:14:11 | 1 test | 2 | 4 | 2019-01-29 19:50:11 | 2
If I wanted to search Rank for User 'test' then I should get Rank 2 as my Answer.
I have done the part from which I can get the overall Rank, but I couldn't able to find Rank for Individual User.
This is code I have written for getting Overall Rank.
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-MariaDB
最佳答案
使用 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 = ?;
关于php - 基于两列的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54426058/