我有一个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: