嵌套分組函數沒有 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章