我尝试了以下查询:
SELECT
MAX(SUM(e.Empid))
FROM HR.Employees
并出现以下错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
我的问题是为什么不允许这样做?
答案 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标准
拉吉