问题
对于常见在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版本进行测试。