Mysql 我如何使用max函数重写此“无效使用组函数”查询以查找秩
我有一个类似这样的问题,给出分数和排行榜首字母:Mysql 我如何使用max函数重写此“无效使用组函数”查询以查找秩,mysql,Mysql,我有一个类似这样的问题,给出分数和排行榜首字母: 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; 玩家有一个主键google_id,这是游戏中的外键 它起作用了 我需要显示球员的排名,他们的得分最高的比赛被考虑在内 我在想,对于排名,我需要1
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;
玩家有一个主键google_id,这是游戏中的外键
它起作用了
我需要显示球员的排名,他们的得分最高的比赛被考虑在内
我在想,对于排名,我需要1+这个球员以上的球员数量。因此,该玩家的最高分数大于该玩家。因此,我尝试了以下操作,但出现错误“无效使用组函数”:
我知道我不能在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;
它首先查找每个玩家子查询的最佳分数,
然后获取玩家信息,加入玩家,
然后让其他玩家获得所有更好的分数,然后像其他玩家一样加入游戏
最后,它统计得分较高的不同玩家的数量
试着这样做:
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;
它首先查找每个玩家子查询的最佳分数,
然后获取玩家信息,加入玩家,
然后让其他玩家获得所有更好的分数,然后像其他玩家一样加入游戏
最后,它统计得分较高的不同玩家的数量
有几种方法 例如,使用选择列表中的相关子查询来获取排名:
SELECT r.score
, r.leaderboard_initials
, ( SELECT 1+COUNT(DISTINCT s.google_id)
FROM games s
WHERE s.score > r.score
) AS rank_
FROM ( SELECT MAX(g.score) AS score
, p.leaderboard_initials
, p.google_id
FROM players p
JOIN games g
ON g.google_id = p.google_id
GROUP
BY p.google_id
) r
ORDER
BY r.score DESC
有几种方法 例如,使用选择列表中的相关子查询来获取排名:
SELECT r.score
, r.leaderboard_initials
, ( SELECT 1+COUNT(DISTINCT s.google_id)
FROM games s
WHERE s.score > r.score
) AS rank_
FROM ( SELECT MAX(g.score) AS score
, p.leaderboard_initials
, p.google_id
FROM players p
JOIN games g
ON g.google_id = p.google_id
GROUP
BY p.google_id
) r
ORDER
BY r.score DESC
哪个版本的MySQL?@Uuerdo 5.6.40-84.0-Log哪个版本的MySQL?@Uuerdo 5.6.40-84.0-Log你太棒了!我加入了playerRank的订单,得到了我所需要的。你太棒了!我增加了playerRank的订单,得到了我所需要的。很好。我可以证实这也行。我已经接受了乌伊尔多的回答,因为他先到了。很好。我可以证实这也行。我已经接受了乌伊尔多的回答,因为他先到了那里。