SQL Group By Before Averaging

时间:2014-02-26 14:24:32

标签: sql ms-access average

目前我有一个查询,可以根据对手找到得分的平均值。

以下是查询:

SELECT NBAGameLog.Opp, AVG(NBAGameLog.Points)
FROM Players INNER JOIN
     NBAGameLog
     ON Players.Player_ID = NBAGameLog.Player_ID
WHERE (NBAGameLog.Date_Played Between Date()-15 And Date() AND
      Players.Position = "C"
GROUP BY NBAGameLog.Opp;

如果我有这样的事情就会出现问题:

NBAGameLog表:

Player_ID    Team     Opp     Points     Position
1            MIA      ATL     15         C
2            MIA      ATL     25         C
3            BOS      ATL     23         C

这样做的结果是:

Position       Opp       Average
C              ATL       21

但是我想首先将查询组合在一起。因此,除了(15 + 25 + 23)/ 3之外,它会看到前两个球员在同一支球队,所以只计算一个并且做(40 + 23)/ 2

这可能吗?

1 个答案:

答案 0 :(得分:3)

您可以使用子查询执行此操作,首先在子查询中聚合,然后在外部查询中再次聚合:

SELECT t.Opp, avg(Points)
FROM (SELECT gl.team, gl.Opp, AVG(gl.Points) as Points
      FROM Players p INNER JOIN
           NBAGameLog gl
           ON p.Player_ID = gl.Player_ID
      WHERE (gl.Date_Played Between Date()-15 And Date() AND
            p.Position = "C"
     GROUP BY gl.team, gl.Opp;
    ) t
GROUP BY t.Opp;