問題
對於常見在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版本進行測試。