我有一张表格,其中包含用户对游戏的分数:
UserID (Integer)
MatchId (Integer)
Score (Double)
我希望得到每个用户的得分和超过平均水平的点数" (PAA) - 用户评分高于或低于平均值的金额。
因此,您需要计算得分的平均值'对于每个' MatchId', 然后为表中的每一行计算出的数量 '得分'与比赛平均值不同。然后将PAA值相加 用户。
是否可以通过MySQL查询执行此操作?或者我需要PHP吗?如果可以通过查询完成,该查询会是什么样的?
答案 0 :(得分:1)
<强>计划强>
- 按比赛计算平均分数
- 将用户分数加入平均分数,并按用户标识计算派生差异字段的总和
<强>设置强>
create table scores
(
UserID integer not null,
MatchId integer not null,
Score decimal(5, 2) not null,
primary key ( UserID, MatchId )
);
insert into scores
( UserID, MatchId, Score )
values
( 1, 1, 22.1 ),
( 2, 1, 36.0 ),
( 3, 1, 35.3 ),
( 1, 2, 50.0 ),
( 2, 2, 39.8 ),
( 3, 2, 42.0 )
;
<强>查询强>
select s.UserID, sum(s.Score - avgs.avg_score) as paa
from scores s
inner join
(
select MatchId, avg(Score) as avg_score
from scores
group by MatchId
) avgs
on s.MatchId = avgs.MatchId
group by s.UserID
;
<强>输出强>
+--------+-----------+
| UserID | paa |
+--------+-----------+
| 1 | -2.966666 |
| 2 | 0.733334 |
| 3 | 2.233334 |
+--------+-----------+
<强> sqlfiddle 强>