MySQL-优化查询并根据列和查找排名

MySQL-优化查询并根据列和查找排名,mysql,optimization,group-by,Mysql,Optimization,Group By,我有一个游戏的高分数据库,可以跟踪不同世界的每一场比赛。我想做的是找出一些关于戏剧的统计数据,然后根据每个世界(按播放次数排序)找出每个世界“排名”的位置 到目前为止,我所有的统计数据都运行良好,但是我在寻找每个世界的排名时遇到了一个问题 我还非常确定,在三个单独的查询中执行此操作可能是一种非常缓慢的方式,并且可能会有所改进 我有一个timestamp列(这里没有使用)和DB模式中索引的“world”列。以下是我的资料来源: function getStast($worldName) { /

我有一个游戏的高分数据库,可以跟踪不同世界的每一场比赛。我想做的是找出一些关于戏剧的统计数据,然后根据每个世界(按播放次数排序)找出每个世界“排名”的位置

到目前为止,我所有的统计数据都运行良好,但是我在寻找每个世界的排名时遇到了一个问题

我还非常确定,在三个单独的查询中执行此操作可能是一种非常缓慢的方式,并且可能会有所改进

我有一个timestamp列(这里没有使用)和DB模式中索引的“world”列。以下是我的资料来源:

function getStast($worldName) {
  // ## First find the number of wins and some other data:
  $query = "SELECT COUNT(*) AS total, 
            AVG(score) AS avgScore, 
            SUM(score) AS totalScore
            FROM highscores 
            WHERE world = '$worldName'
            AND victory = 1";
  $win = $row['total'];

  // ## Then find the number of losses:
  $query = "SELECT COUNT(*) AS total 
            FROM highscores 
            WHERE world = '$worldName'
            AND victory = 0";
  $loss = $row['total'];

  $total = $win + $loss;

  // ## Then find the rank (this is the broken bit):
  $query="SELECT world, count(*) AS total 
          FROM highscores 
          WHERE total > $total
          GROUP BY world
          ORDER BY total DESC";

  $rank = $row['total']+1;
  // ## ... Then output things.
}
我相信让我失望的特定代码行是在排名查询中

              WHERE total > $total
它不能工作是因为它不能接受WHERE子句中的计算总数作为参数吗


最后,有没有更有效的方法在一个SQL查询中计算所有这些内容?

我想您可能需要使用“having total>$total”

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC

我想您可能想使用'having total>$total'

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC

或者这是同一个问题吗?修订版,这就是你使用的吗?啊哈!我把“HAVING”语句放在“groupby”之前。呜呜!或者这是同一个问题吗?修订版,这就是你使用的吗?啊哈!我把“HAVING”语句放在“groupby”之前。呜呜!