MySQL按键获取最高值,然后为其添加排名

Posted

技术标签:

【中文标题】MySQL按键获取最高值,然后为其添加排名【英文标题】:MySQL Fetch highest value by key and then add rank to it 【发布时间】:2022-01-07 20:27:53 【问题描述】:

我正在尝试创建一个 mysql 查询,该查询通过我的记分牌查找给定的 playerid,然后找到他们的最高分数,然后在该分数上添加一个排名。 我已经非常接近我想要通过这段代码实现的目标:

SELECT PlayerUUID, `iGamescore` as score, FIND_IN_SET( iGamescore, (    
SELECT GROUP_CONCAT( iGamescore
ORDER BY iGamescore ASC ) 
FROM crystm_gameScoreboard )
) AS rank
FROM crystm_gameScoreboard
WHERE PlayerUUID =  '4c8984f3-651a-48bc-ad1a-879624380fab'
LIMIT 1

返回:

但我确实知道这名球员已经打了很多次,因此多次出现在记分牌上。如此处所示:

所以这里的问题是,是的,它确实找到了玩家并正确给出了排名。但是,由于它存在多次,它会保存第一个分数而不是最高分数。我将如何修复我的查询以纠正此问题,或者您是否会在每次他们为自己创建高分时创建新分数,而只是更新他们在记分牌中的先前记录?

提前致谢

【问题讨论】:

如何通过子句添加订单ORDER BY iGamescore DESC @ProGu 已经很遗憾地尝试过了。这打破了排名,将其排在第 11 位:( 你的结果应该是什么? 您的 GROUP_CONCAT 由 ASC 而非 DESC 订购 这能回答你的问题吗? MySQL - Rank user amongst list of top high-scores 【参考方案1】:

要获得最高分,您需要GROUP BY

SELECT 
   PlayerUUID, 
   MAX(`iGamescore`) as score
   RANK() OVER (ORDER BY MAX(`iGamescore`) DESC) as Rang
FROM crystm_gameScoreboard
GROUP BY PlayerUUID 
ORDER BY 3 ASC

order by 3 ASC 使列表按排名排序

【讨论】:

Rank 是 8.0 及以上版本的保留字,除非引用,否则不应用作别名。 好的,改成Rang,这是这个词的德语变体(translate.google.com/…)【参考方案2】:

这篇文章解决了它: MySQL - Rank user amongst list of top high-scores

拥有我想要的一切。我不知道为什么我找不到这个帖子,但是在搜索时,关键字很重要哈哈。

感谢您的意见。

【讨论】:

以上是关于MySQL按键获取最高值,然后为其添加排名的主要内容,如果未能解决你的问题,请参考以下文章

MySQL跨多列排名

PHP+MYSQL查询结果上加一个排名序号且分页不间断

在 SQL 中查找排名最高的相交行

PySpark - 根据另一列值的降序添加递增的整数排名值

MySQL,获取用户排名

按降序排序并返回用于排名的记录号