列中的列无效,即使它是聚合的

sir*_*ank 5 sql t-sql sql-server group-by window-functions

这是我的查询:

SELECT ScriptName
      ,BranchName
      ,AVG(Passes) OVER (PARTITION BY ScriptName, BranchName) AS AvgPasses
FROM temp3
GROUP BY ScriptName, BranchName
Run Code Online (Sandbox Code Playgroud)

这是我的错误:

列'temp3.Passes'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.

我明白了GROUP BY.这OVER PARTITION BY意味着什么不适用GROUP BY?我无法在MSDN上找到任何内容.如果它确实意味着它不起作用,有人可以解释为什么吗?我想不出这会产生问题的情况.

Gor*_*off 6

是的,这over partition by意味着它无法使用group by.所以删除它:

SELECT ScriptName, BranchName,
       AVG(Passes) AS AvgPasses
FROM temp3
GROUP BY ScriptName, BranchName;
Run Code Online (Sandbox Code Playgroud)

从技术上讲,原因是因为Passes不在group by聚合函数中而不在聚合函数中.

首先,如果Passes是整数,则平均值也是整数.如果需要浮点平均值,则将值转换为适当的类型.

其次,分析函数可以使用group by.例如,如果你想要所有平均值的总和,你可以这样做:

SELECT ScriptName, BranchName,
       AVG(Passes) AS AvgPasses,
       SUM(AVG(Passes)) over (ScriptName, BranchName) as SumAvg
FROM temp3
GROUP BY ScriptName, BranchName;
Run Code Online (Sandbox Code Playgroud)

好吧,这看起来很奇怪.但是min()并且max()可能有用.