嵌套分组函数没有 GROUP BY /ORA-00937:不是单分组函数---解决思路

今天在操作数据库时遇到了oracle的报错,错误类型为ORA-00978/ORA-00937,经与同事讨论研究之后发现一个特别容易犯错的点。

首先,我的目的是从一个表中取出一列数值,然后对这一列数值进行求和并平均

取数SQL为:select b.vendor from t_cm_networknode b where b.vendor is not null

求和并平均SQL为:select avg(sum(f.vendor)) from (select b.vendor from t_cm_networknode b where b.vendor is not null) f (不要质疑为什么不在取数时直接进行sum avg–!)

取数SQL结果如下:

在这里插入图片描述

求和平均SQL却报错,错误类型如下:

在这里插入图片描述

然后查询ORA-00978原因后,修改SQL为:

select f.cloud ,avg(sum(f.vendor)) from (select 12321 as cloud, b.vendor from t_cm_networknode b where b.vendor is not null) f group by cloud

运行扔报错,错误提示为ORA-00937:

在这里插入图片描述

然后继续修改SQL如下:

select avg(sum(f.vendor)) from (select b.vendor from t_cm_networknode b where b.vendor is not null) f group by vendor

结果如下:
在这里插入图片描述

值出来了,但似乎是求和,并没有平均

然后继续修改SQL为:

select sum(f.vendor)/count(f.vendor) from (select b.vendor from t_cm_networknode b where b.vendor is not null) f

结果为:
在这里插入图片描述

好了,这就是我们想要的结果,想必看到这里,对于错误的原因应该也清楚了。

错误总结:

oralce中聚合函数(count、max、min、sum、avg等)在使用时,必须指定其聚合的维度对象,也就是必须通过group by来实现其聚合对象的分类,若聚合结果只有一条数值,则不需要group by指定聚合对象。

本次报错的原因在于avg(sum())时,sum()后就是一条数据,avg()的对象只有一条,故报错ORA–00978,后续增加虽增加了group by cloud ,但avg()也是一条,无法对应多个cloud,故报错ORA–00937,

在针对结果只有一条数据的汇聚时,用sum()/count()即可。
————————————————
版权声明:本文为CSDN博主「walking_visitor」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/walking_visitor/article/details/80908480

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值