ORA-00979不是GROUP BY表達式

問題

對於常見在select中出現的列沒有全部出現在group by的後面這種原因就不再進行細說了,現說下我碰到的比較特殊的情況。在Oracle的11.2.0.1.0版本上執行下面語句報ORA-00979不是GROUP BY表達式錯誤

select substr(a.empno,1,4) as year,count(1) 
from (select * from  scott.emp) a 
group by substr(a.empno,1,4) 
order by substr(a.empno,1,4) desc;

但是換成下面兩種方式就沒用問題:

方式1 不使用子查詢

select substr(a.empno,1,4) as year,count(1) 
from scott.emp a 
group by substr(a.empno,1,4) 
order by substr(a.empno,1,4) desc;

方式2 order by 中使用別名

select substr(a.empno,1,4) as year,count(1) 
from (select * from  scott.emp) a 
group by substr(a.empno,1,4) 
order by year desc;

總結

個人分析,是因爲Oracle的11.2.0.1.0版本不支持:在使用子查詢且有group by 的情況下,對order by裏的字段不使用別名。所以以後在寫sql的時候儘量規範化,即order by 後面儘量使用別名。注:本人使用11.2.0.4.0版本時,並未碰到上面的問題,故推測是11.2.0.1.0版本問題,可通過升級oracle版本進行測試。

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