SELECT列表中的嵌套聚合函数

时间:2013-01-21 10:35:24

标签: sql sql-server tsql select

我尝试了以下查询:

SELECT 
    MAX(SUM(e.Empid))
FROM HR.Employees

并出现以下错误:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

我的问题是为什么不允许这样做?

6 个答案:

答案 0 :(得分:6)

每个聚合都适用于一个组。您只能为每个查询定义一个组。因此,多个聚合需要子查询。例如,要查找最大部门的员工数量:

SELECT  MAX(EmpCount)
FROM    (
        SELECT  COUNT(*) as EmpCount
        FROM    HR.Employees
        GROUP BY
                e.Department
        ) as SubQueryAlias

答案 1 :(得分:1)

由于您尚未定义任何要分组的列,因此SUM()的值等于MAX()

<强>更新

引发了错误,因为MAX(SUM(e.Empid))需要两个分组选择的结果,而不仅仅是一个。

答案 2 :(得分:0)

SUM(x)评估为单个值,因此MAX的结果不合适。

答案 3 :(得分:0)

这个查询毫无意义,因为即使它有效,它也只返回一个值:Empid的总和。应用于一个值的MAX函数并不真正有用。

答案 4 :(得分:0)

试试这个

SELECT MAX(_ID)
FROM (SELECT SUM(e.Empid) _ID FROM HR.Employees e) t

答案 5 :(得分:0)

行。我现在收到了你的问题。原因如下:

  

值表达式仅包含在set函数规范中   不应包含set函数规范或子查询。如果   value表达式包含一个外部的列引用   参考,那么外部参考应该是唯一的列   值表达式中包含的引用。

进一步阅读:SQL 92标准

拉​​吉