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版本进行测试。

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