【问题标题】:Column invalid in select list even though it's in aggregate选择列表中的列无效,即使它是聚合的
【发布时间】:2014-04-02 03:36:27
【问题描述】:

这是我的查询:

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 上找不到任何东西。如果确实意味着它不起作用,有人可以解释为什么吗?我想不出在什么情况下会出现问题。

【问题讨论】:

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


    【解决方案1】:

    是的,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() 可能有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 2014-11-02
      • 1970-01-01
      • 2011-07-04
      • 2013-08-17
      相关资源
      最近更新 更多