Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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
Mysql SQL子查询聚合错误_Mysql - Fatal编程技术网

Mysql SQL子查询聚合错误

Mysql SQL子查询聚合错误,mysql,Mysql,我有一个记分板,显示当前排名的基础上获得的大多数平均分 我和6个朋友每晚打几轮 我们跟踪: Playername playerid 各轮累积的所有分数之和 打了多少回合 平均分/轮数 这是可行的,但我想添加一个计算,如果球员在记分板上上升或下降,以及平均分是多少 这是我的代码: SELECT t1.playerid as player ,SUM(t1.points) AS points ,count(t1.playerid) A

我有一个记分板,显示当前排名的基础上获得的大多数平均分

我和6个朋友每晚打几轮

我们跟踪: Playername playerid 各轮累积的所有分数之和 打了多少回合 平均分/轮数

这是可行的,但我想添加一个计算,如果球员在记分板上上升或下降,以及平均分是多少

这是我的代码:

SELECT   t1.playerid as player
                ,SUM(t1.points) AS points
                ,count(t1.playerid) AS rounds
                ,avg(t1.points) as average_points

/* get tournament ID of last round */
                ,(select distinct(tournamentid) from pokermax_scores order by tournamentid desc limit 1,1) as 1_round_ago

/* calculate average points earned one round ago */                
                ,(select avg(points) from pokermax_scores  where tournamentid <= 1_round_ago group by t1.playerid) as avg_last
                ,(avg(t1.points)-(select avg(points) from pokermax_scores  where tournamentid <= 1_round_ago group by t1.playerid)) as gain_loss
FROM pokermax_scores as t1
GROUP BY player
ORDER BY average_points DESC
前一轮是前一轮的比赛

然而,它没有正确计算上一轮的平均值,而是取上一轮平均值的平均值

结果:

如你所见,这里的平均值是错误的。以下是数字来源的excel示例:


有没有关于如何更正代码的线索?已尝试过,但MariaDB不支持它。

您需要使用相关子查询来获取行中玩家的平均值。更改:

(select avg(points) 
from pokermax_scores  
where tournamentid <= 1_round_ago 
group by t1.playerid)
致:

(select avg(points) 
from pokermax_scores t2 
where tournamentid <= 1_round_ago 
and t2.playerid = t1.playerid)