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

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

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

我想让每位用户的“分数高于平均水平”(PAA) - 用户得分高于或低于平均水平的总和。

因此,您需要为每个“MatchId”计算“Score”的平均值,然后对表中的每一行计算“Score”与匹配平均值的差异。 然后按用户总和该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  |
    +--------+-----------+
    

    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