gpt4 book ai didi

mysql - 如何使用 max 函数重写此 'Invalid use of group function' 查询来查找排名

转载 作者:行者123 更新时间:2023-11-29 06:32:29 25 4
gpt4 key购买 nike

我有一个像这样的查询,给出分数和排行榜缩写:

select MAX(score) as score, leaderboard_initials
from players p, games g where p.google_id = g.google_id
group by p.google_id
order by MAX(score) DESC;

Players 有一个主键 google_id,它是 games 中的外键。

它有效。

我需要显示玩家的排名,其中考虑到他们最高得分的游戏。

我认为对于排名,我需要 1 + 该玩家之上的玩家数量。那么该玩家的最高分就大于该玩家。因此,我尝试了以下操作,但收到错误组函数的无效使用:

select 1+(SELECT count(DISTINCT p2.google_id) from players p2, games 
g2 where MAX(g2.score) > score) as rank,
MAX(score) as score, leaderboard_initials
from players p, games g where p.google_id = g.google_id
group by p.google_id
order by MAX(score) DESC;

我知道我不能在 WHERE 中使用 MAX() 但我不知道如何在不这样做的情况下获得排名。有任何想法吗?

最佳答案

尝试这样的事情:

SELECT p.google_id, p.leaderboard_initials, bestScores.maxScore
, COUNT(DISTINCT others.google_id) + 1 AS playerRank
FROM (
SELECT google_id, MAX(score) AS maxScore
FROM games
GROUP BY google_id
) AS bestScores
INNER JOIN players AS p
ON bestScores.google_id = p.google_id
LEFT JOIN games AS others
ON bestScores.google_id <> others.google_id
AND bestScores.maxScore < others.score
GROUP BY p.google_id, p.leaderboard_initials, bestScores.maxScore;
  • 首先找到每个玩家的最佳得分(子查询),
  • 然后获取玩家信息(INNER JOIN玩家),
  • 然后获得其他玩家的所有更好分数(LEFT JOIN 游戏作为其他玩家)
  • 最后,它会计算得分较高的不同玩家的数量

关于mysql - 如何使用 max 函数重写此 'Invalid use of group function' 查询来查找排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55541515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com