MySQL查询来获取列和同一列的AVG之间的差异总和
我有一个表格,其中包含用户对游戏的评分:
UserID (Integer)
MatchId (Integer)
Score (Double)
我想让每位用户的“分数高于平均水平”(PAA) - 用户得分高于或低于平均水平的总和。
因此,您需要为每个“MatchId”计算“Score”的平均值,然后对表中的每一行计算“Score”与匹配平均值的差异。 然后按用户总和该PAA值。
是否有可能通过MySQL查询做到这一点? 或者我需要PHP吗? 如果可以通过查询完成,该查询将是什么样子?
计划
建立
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
链接地址: http://www.djcxy.com/p/63775.html上一篇: MySQL query to get sum of differences between column and AVG of same column
下一篇: MySQL pivot table