子查询需要分组,没有单行功能

时间:2019-07-18 00:07:22

标签: sql oracle oracle12c

根据我的理解,依赖于一个或多个聚合函数以及至少一个单行函数的查询需要放置单行函数 在group by子句中,这在总体上是有意义的。

enter image description here 但是,我正在处理在线资源中的问题,并遇到了图片中的问题,为什么我回答它成功执行但给出了不正确的输出,其背后的逻辑是子查询是仅具有聚合功能的查询,相信它不需要group by,为什么在子查询中为什么需要group by?

2 个答案:

答案 0 :(得分:1)

您可以轻松测试this

select max(count(*))
from dual;

错误是:

  

ORA-00978:没有GROUP BY的嵌套组函数

因此,嵌套的分组依据似乎需要GROUP BY

答案 1 :(得分:1)

Gordon已清除,“嵌套聚合需要GROUP BY子句”。如果我们将查询分为两部分,则在将Haveing指定为特定值的情况下,第一部分可以正常工作。

示例:

在此链接中运行查询: https://livesql.oracle.com/apex/f?p=590:1:104596775146183::NO:RP ::

select count(*), PROD_CATEGORY_ID from SH.PRODUCTS group by PROD_CATEGORY_ID      
having count(*)>15;

但是,如果我们将2个聚合函数结合在一起,则会出错,

select max(count(PROD_CATEGORY_ID)) from SH.PRODUCTS ; --> Throws ORA-00978
select max(count(PROD_CATEGORY_ID)) from SH.PRODUCTS 
group by PROD_CATEGORY_ID; -->Gives max count of prod_cat

给出最终结果:

select count(*), PROD_CATEGORY_ID from SH.PRODUCTS 
group by PROD_CATEGORY_ID 
having count(*)=(select max(count(*)) from SH.PRODUCTS group by PROD_CATEGORY_ID);

链接中的好例子: https://mahtodeepak05.wordpress.com/2014/12/17/aggregate-function-nesting-in-oracle/