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