MySQL查询获取同一列的列和AVG之间的差异总和

时间:2015-11-07 09:37:19

标签: php mysql

我有一张表格,其中包含用户对游戏的分数:

UserID (Integer)
MatchId (Integer)
Score (Double)
  

我希望得到每个用户的得分和超过平均水平的点数" (PAA) -   用户评分高于或低于平均值的金额。

     

因此,您需要计算得分的平均值'对于每个' MatchId',   然后为表中的每一行计算出的数量   '得分'与比赛平均值不同。然后将PAA值相加   用户。

是否可以通过MySQL查询执行此操作?或者我需要PHP吗?如果可以通过查询完成,该查询会是什么样的?

1 个答案:

答案 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