我有这个问题:
SELECT AVG(legs.avg) FROM legs INNER JOIN matchs ON matchs.id = legs.match_id WHERE matchs.player_id=4 GROUP BY match_id
这使我可以获得属性“legs.avg”的平均值。
问题是我得到了这个查询的几个结果,每个匹配一个匹配.id。
我需要获得这些不同结果的平均值,因此只有一行具有总平均值。
这可能吗?
答案 0 :(得分:1)
一种方法是获得“平均值”:
SELECT avg(l_avg)
FROM (SELECT AVG(l.avg) as l_avg
FROM legs l INNER JOIN
matchs m
ON m.id = l.match_id
WHERE m.player_id = 4
GROUP BY l.match_id
) lm;
还有两种没有子查询的方法:
SELECT AVG(l.avg) as l_avg
FROM legs l INNER JOIN
matchs m
ON m.id = l.match_id
WHERE m.player_id = 4;
或者:
SELECT SUM(l.avg) / COUNT(DISTINCT l.match_id) as l_avg
FROM legs l INNER JOIN
matchs m
ON m.id = l.match_id
WHERE m.player_id = 4;
这些不返回相同的值。第一个是整体平均值,第二个是加权值,因此每个匹配的权重正好为1.这与第一个查询的子查询相同。
如果没有样本数据,则不清楚您真正想要的版本。
答案 1 :(得分:0)
使用以下查询: -
select avg(leg_avg) from (SELECT AVG(legs.avg) leg_avg FROM legs INNER JOIN matchs ON matchs.id = legs.match_id WHERE matchs.player_id=4 GROUP BY match_id) a11