嵌套分组函数没有GROUPBYORA-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
groupby是什么函数结果如下:
值出来了,但似乎是求和,并没有平均
然后继续修改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,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。