这是我的问题:
SELECT ScriptName
,BranchName
,AVG(Passes) OVER (PARTITION BY ScriptName, BranchName) AS AvgPasses
FROM temp3
GROUP BY ScriptName, BranchName
这是我的错误:
列'temp3.Passes'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我理解GROUP BY
。 OVER PARTITION BY
是否意味着它不适用于GROUP BY
?我无法在MSDN上找到任何内容。如果它确实意味着它不起作用,有人可以解释为什么吗?我无法想到会出现问题的情况。
答案 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()
可能很有用。