0

我尝试了以下查询:

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

并得到以下错误:

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

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

4

6 回答 6

6

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

SELECT  MAX(EmpCount)
FROM    (
        SELECT  COUNT(*) as EmpCount
        FROM    HR.Employees
        GROUP BY
                e.Department
        ) as SubQueryAlias
于 2013-01-21T11:04:16.877 回答
1

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

更新

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

于 2013-01-21T10:39:26.833 回答
0

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

于 2013-01-21T10:37:41.720 回答
0

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

于 2013-01-21T10:37:58.423 回答
0

尝试这个

SELECT MAX(_ID)
FROM (SELECT SUM(e.Empid) _ID FROM HR.Employees e) t
于 2013-01-21T10:48:59.043 回答
0

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

仅包含在集合函数规范中的值表达式不应包含集合函数规范或子查询。如果值表达式包含作为外部引用的列引用,则该外部引用应是值表达式中包含的唯一列引用。

进一步阅读:SQL 92 标准

拉吉

于 2013-01-21T11:05:22.100 回答