嵌套聚合函数

Posted

技术标签:

【中文标题】嵌套聚合函数【英文标题】:Nested aggregate functions 【发布时间】:2020-11-06 12:42:12 【问题描述】:
SELECT MAX(AVG(SYSDATE - inv_date)) FROM invoice;

这个查询有什么问题?

Avg 返回单个值 no Max需要一个小组来工作,所以它不会执行并给出错误? 请解释工作 这是一个测验问题,根据它不会执行我想知道它执行的原因我不知道允许对吗?

【问题讨论】:

【参考方案1】:

Oracle 允许嵌套聚合函数(请参阅documentation)。

但是,它需要GROUP BY。所以这是允许的:

SELECT MAX(AVG(SYSDATE - inv_date))
FROM invoice
GROUP BY Cust_ID;

基本上,这是一条捷径:

SELECT MAX(x)
FROM (SELECT AVG(SYSDATE - inv_date) as x
      FROM invoice
       GROUP BY Cust_Id
     ) i;

不过,在您的情况下,没有GROUP BY。 Oracle 不允许在没有 GROUP BY 的情况下嵌套 GROUP BY

如果您好奇,我不喜欢这种扩展功能。我不认为它实际上解决了问题。

【讨论】:

在测验中他们说这不会执行或抛出错误。我想知道它抛出错误的原因。 SELECT MAX(AVG(SYSDATE - inv_date)) FROM invoice; @MushkanTisekar 。 . .我详细说明了。我没有尝试过没有GROUP BY 的嵌套GROUP BY。它不起作用对我来说似乎有点奇怪,但它会在没有GROUP BY的情况下产生语法错误。 顺便说一下,你能告诉我关于“FROM(.....) i”的信息,我们可以使用这样的变量吗?你在你的解释查询中使用过。我是 SQL 初学者,所以我不懂很多东西。 @MushkanTisekar 。 . .正确地称为表别名。

以上是关于嵌套聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

查找 SQL 聚合函数调用中的百分比可能没有嵌套聚合或窗口函数

SQL:多个嵌套聚合函数

错误 [HY000] 错误:聚合函数调用不能嵌套 */

嵌套时聚合函数的范围 apply(within())

什么时候可以将聚合函数嵌套在标准 SQL 中?

Day458.聚合函数 -mysql