我有这张桌子:
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