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上找到任何内容.如果它确实意味着它不起作用,有人可以解释为什么吗?我想不出这会产生问题的情况.
是的,这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()可能有用.
| 归档时间: |
|
| 查看次数: |
2424 次 |
| 最近记录: |