Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询以获取同一列的列和平均值之间的差异之和_Php_Mysql - Fatal编程技术网

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  |
+--------+-----------+

什么样的游戏涉及浮点值?即使体操也只能打小数。你应该先展示你的尝试