php - 基于两列的排名

标签 php sql mariadb

通过比较三列从数据库中查找特定用户的排名。

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/

相关文章:

php - 如何在 win7 x64 上使用带有 php (xampp) 的 oracle 客户端 11.2

php - 使用删除和添加操作对 Woocommerce Storefront header 的内容重新排序

php - 如何使用 php 在一行中从 mysql 查询中获取单个字段?

sql - 在DB2 SQL中实现分页逻辑

mysql - 在严格模式下截断 INSERT 作为异常?

php - laravel 记得我不工作

sql - 通过 SQL 错误更新 has_many

sql - 消息 8120 - 选择列表中的列无效,因为它未包含在聚合函数或 GROUP BY 子句中

mysql - 向 MariaDB/MySQL 表添加外键

mysql - 如果不同列中不存在数据,则允许重复记录