Php MySQL查询以获取同一列的列和平均值之间的差异之和
我有一个表,其中包含一个游戏的用户分数:Php MySQL查询以获取同一列的列和平均值之间的差异之和,php,mysql,Php,Mysql,我有一个表,其中包含一个游戏的用户分数: UserID (Integer) MatchId (Integer) Score (Double) 我想获得每个用户的“平均分数以上”(PAA)的总和——即 用户得分高于或低于平均值的金额 因此,您需要计算每个“匹配ID”的“分数”平均值, 然后为表中的每一行计算 “得分”与比赛平均值不同。然后将PAA值和 用户 是否可以通过MySQL查询实现这一点?还是我需要PHP?如果可以通过查询完成,那么该查询将是什么样子?计划 通过匹配计算平均得分 将用户分
UserID (Integer)
MatchId (Integer)
Score (Double)
我想获得每个用户的“平均分数以上”(PAA)的总和——即
用户得分高于或低于平均值的金额
因此,您需要计算每个“匹配ID”的“分数”平均值,
然后为表中的每一行计算
“得分”与比赛平均值不同。然后将PAA值和
用户
是否可以通过MySQL查询实现这一点?还是我需要PHP?如果可以通过查询完成,那么该查询将是什么样子?计划
- 通过匹配计算平均得分
- 将用户分数与平均分数相加,并根据用户ID计算导出的差异字段的总和
设置
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 |
+--------+-----------+
什么样的游戏涉及浮点值?即使体操也只能打小数。你应该先展示你的尝试