關於ORA-00979 不是 GROUP BY 表達式錯誤的解釋
阿新 • • 發佈:2018-10-17
and HERE 數據 存在 解釋 字段 avg 而在 creat
ORA-00979 不是 GROUP BY 表達式”這個錯誤,和我前面介紹的另外一個錯誤ORA-00937一樣使很多初學oracle的人愛犯的。
我在介紹使用聚合函數中用group by來分組數據時特別說明了select 列表項中不存在的列可以出現在group by的列表項中,但反過來就不行了,在select列表項中出現的列必須全部出現在group by後面(聚合函數除外)
但一些朋友經常愛把select 列表項的中列忘了寫在group by中。於是就出現了以上的錯誤ORA-00979 不是GROUP BY 表達式。
Oracle的中文錯誤提示信息翻譯得非常不到位,面對著不是 GROUP BY 表達式很多朋友摸不著頭腦,不知道oracle在說什麽。
例如下面的例子就會出現這個錯誤:
SQL> select deptno,job,avg(sal) from emp group by deptno;
ERROR 位於第 1 行:
ORA-00979: 不是 GROUP BY 表達式
這裏就是因為在select 列表像中出現了像deptno和job,而在group by中並沒有出現的緣故。
以上的錯誤糾正為:
Select deptno,job,avg(sal) from emp
Group by deptno,job;
另外的一種解決方法,字段盡量少帶,
select "COUNT"("ID") from (SELECT UNIONID, "ID" FROM WX_ORDER WHERE PAY_STATUS=0 and ORDER_STATUS=0 and CREATE_TIME BETWEEN 1539705600 AND 1539791999) GROUP BY UNIONID ;
關於ORA-00979 不是 GROUP BY 表達式錯誤的解釋