获取AVG结果的AVG

时间:2018-04-20 09:59:07

标签: sql

我有这个问题:

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。

我需要获得这些不同结果的平均值,因此只有一行具有总平均值。

这可能吗?

2 个答案:

答案 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