平均前按SQL分组

平均前按SQL分组,sql,ms-access,average,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.Posi

目前,我有一个查询,根据对手的不同,查找得分的平均值

以下是查询:

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


这可能吗?

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

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;

这非常接近。唯一的问题是我需要将子查询中的平均值更改为SUM。不过,这让我走对了方向,谢谢@充满了问题。如果使用
sum()
,则问题中的示例为(40+23)/2=31。我选择了
avg()
,因为它似乎更接近OP值。