当前位置: 首页 > 面试题库 >

MySQL-在最高得分列表中排名用户

柴修筠
2023-03-14
问题内容

我有一个MySQL查询,该查询选择users表中得分最高的3名球员,然后创建一个额外的列,为他们分配排名:

SELECT s.*, @curRank := @curRank + 1 AS rank
FROM users AS s
JOIN
( SELECT DISTINCT highscore
  FROM users
  ORDER BY highscore DESC
      LIMIT 3
) AS lim
ON s.highscore = lim.highscore 
, (SELECT @curRank := 0) r
ORDER BY s.highscore DESC ;

目前的进展

因此,如果表如下所示:

userid   name     highscore
0        sam      20
1        james    39
2        jack     10
3        harry    46
4        jennie   7

查询的结果将是这样的:

userid  name    highscore   rank
3       harry   46          1
1       james   39          2
0       sam     20          3

问题

如何更改此查询,使其在结果列表中也显示用户及其排名?例如,如果$userName = "jenny"我如何返回:

userid  name    highscore   rank
3       harry   46          1
1       james   39          2
0       sam     20          3
4       jenny   7           5   <-- Add this row and skip jack

编辑:我应该提到-我正在使用MySQL 5.0.96版


问题答案:

对于8.0之前的版本…

SELECT *
  FROM 
     ( SELECT a.*
            , @i := @i+1 i
         FROM my_table a
         JOIN (SELECT @i:=0) vars
        ORDER 
           BY highscore DESC
            , userid 
     ) x
 WHERE name = 'jennie'
    OR i <= 3
     ORDER 
        BY i;

https://www.db-fiddle.com/f/hYsiCE1bXeTnR2HzoJkKiR/0



 类似资料:
  • 问题内容: 我想按从高到低的顺序进行排序。 问题答案: java.util.Collections.sort(列表,比较器) 您将需要写一个

  • 问题内容: 我完全为在mysql中从rank()over(按x分区,按y desc排序)创建新列“ LoginRank”而感到困惑。 从SQL Server,我将编写以下查询,以创建按“登录”分组并按“ id”排序的“ Loginrank”列。 我有下表。 我尝试将许多现有的mysql修复程序应用到我的数据集,但仍然存在问题。 任何帮助是极大的赞赏。谢谢! 问题答案: 请尝试以下查询:-MySql

  • 问题内容: 如果我有一个名为和的列名,它们是否不同? 如果我有一个名为和的表,它们是否不同? 问题答案: 在Unix上,表名区分大小写。在Windows上则不是。好玩,不是吗?Kinda喜欢各自的文件系统。你觉得这是巧合吗? 换句话说,如果您打算在Linux机器上进行部署,则也可以针对基于Linux的MySQL更好地测试SQL,或者在生产时为神秘的“找不到表”错误做好准备。这些天虚拟机很便宜。 字

  • 问题内容: 我有一个表格播放器的以下表格结构 假设玩家ID和得分具有有效值,是否可以基于单个查询中的得分数量来更新所有玩家的排名?如果两个人的分数相同,则应该并列。 更新: 我正在使用建议作为本机查询的查询使用hibernate模式。Hibernate不喜欢使用变量,尤其是’:’。有人知道任何解决方法吗?是通过不使用变量,还是在这种情况下通过使用HQL解决hibernate的限制? 问题答案: 一

  • 问题内容: 所以我有一张桌子,如下所示: 然后,我需要对它们进行分组,排序和排序以给出: 现在,我知道您可以使用temp变量进行排名,例如此处,但是如何对分组集进行排名呢?感谢您的见解! 问题答案: 这以非常简单的方式起作用: 初始查询按第一,第二顺序排序。 并初始化为 用于测试是否输入下一组。如果的先前值(存储在中)不等于当前值(存储在中),则将其清零。否则增加。 分配了新值,并将在下一行的第3

  • 问题内容: 有没有办法在mysql中获取表的列名?使用PHP 问题答案: 您可以使用DESCRIBE: 或者,在较新的版本中,您可以使用INFORMATION_SCHEMA: 或者您可以使用SHOW COLUMNS: