列中的列无效,即使它在汇总中也是如此

时间:2014-02-28 22:19:13

标签: sql sql-server tsql group-by window-functions

这是我的问题:

SELECT ScriptName
      ,BranchName
      ,AVG(Passes) OVER (PARTITION BY ScriptName, BranchName) AS AvgPasses
FROM temp3
GROUP BY ScriptName, BranchName

这是我的错误:

  

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

我理解GROUP BYOVER PARTITION BY是否意味着它不适用于GROUP BY?我无法在MSDN上找到任何内容。如果它确实意味着它不起作用,有人可以解释为什么吗?我无法想到会出现问题的情况。

1 个答案:

答案 0 :(得分:6)

是的,over partition by表示它无法与group by一起使用。所以删除它:

SELECT ScriptName, BranchName,
       AVG(Passes) AS AvgPasses
FROM temp3
GROUP BY ScriptName, BranchName;

从技术上讲,原因是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;

好的,这看起来很奇怪。但min()max()可能很有用。