2013-01-21 178 views
0

我尝试以下查询:嵌套的集合功能

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

,并得到了以下错误:

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

我的问题是,为什么没有这可以吗?

+0

你到底想达到什么目的? –

+0

这是不允许的,因为它有点没用? – Raj

+0

这是一个简单的查询,从一个大查询近似,我无意尝试这种形式,并得到错误,我改变我的查询来获得结果。但是,后来我想到了这种结构,并不知道为什么会出现这种错误。无论我想要返回什么都没关系,但为什么会引发错误 – veljasije

回答

1

因为你还没有定义任何列被分组,而SUM()的值等于MAX()

UPDATE

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

+0

即使我添加组子句,我仍然收到错误?我的问题是为什么这个错误,而不是一些不合适的值或其他东西? – veljasije

+0

@veljasije因为'max(sum(value))'需要两个分组选择的结果,而不仅仅是一个。 –

+0

如果我理解的很好,首先我需要执行一个聚合函数,这会得到另一个分组结果集,然后我需要评估第二个聚合函数。换句话说,SELECT列表像一个阶段一样处理完成,并且在该步骤中只能进行一次聚合? – veljasije

0

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

0

这个查询没有意义,因为即使它工作了,它也只会返回一个值:Empid的总和。应用于一个值的MAX函数并不实用。

+0

我知道这个查询没有意义,但我需要知道为什么不允许在内部? – veljasije

+0

也许这可能有助于:http://stackoverflow.com/questions/10747963/why-cant-i-perform-an-aggregate-function-on-an-expression-containing-an-aggrega –

0

试试这个

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

在组中的每个骨料的作品。每个查询只能定义一个组。所以多个聚合需要子查询。例如,要找到最大部门的员工数量:

0

好的。我现在得到了你的问题。这是为什么:

The value expression simply contained in set function specification shall not contain a set function specification or a subquery. If the value expression contains a column reference that is an outer reference, then that outer reference shall be the only column reference contained in the value expression.

延伸阅读:SQL 92个标准

拉吉