我有这张桌子:

Username | score | gameid
SimJoo   | 14    | 1
SimJoo   | 20    | 1
SimJoo   | 23    | 2
Master   | 32    | 1
Master   | 25    | 2
Master   | 9     | 2

对于每个玩家,我需要玩家在每个gameid上的最高得分除以该gameid获得的最高得分之和。这个,对于任何数量的不同玩家,分数和游戏ID。
上述示例表的结果是:
Username | total score
Master   | 2.000
SimJoo   | 1.545

为了清楚起见:
玩家主机的计算是(32/32)+(25/25)=2.000
玩家simjoo的计算是(20/32)+(23/25)=1.545
SELECT Username, SUM((SELECT MAX(score) WHERE Username=? AND gameid=?)/(SELECT MAX(Score) WHERE gameid=?)) AS total_score
GROUP BY Username
ORDER BY total_score DESC

最佳答案

第一个子查询返回每个游戏用户的最大得分。第二个-游戏最大值

select Username, sum(umax/gmax)
    from
      (select Username, gameid, max(score) umax
          from t
        group by Username, gameid
     ) u
    left join
      (select gameid, max(score) gmax
          from t
        group by gameid
      ) g
    on u.gameid = g.gameid
  group by Username

example on sqlfiddle

10-06 15:54