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按键获取最高值,然后为其添加排名的主要内容,如果未能解决你的问题,请参考以下文章