Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我如何使用max函数重写此“无效使用组函数”查询以查找秩_Mysql - Fatal编程技术网

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的订单,得到了我所需要的。很好。我可以证实这也行。我已经接受了乌伊尔多的回答,因为他先到了。很好。我可以证实这也行。我已经接受了乌伊尔多的回答,因为他先到了那里。