日期:2014-05-17  浏览次数:21110 次

oracle9i与10g对于group by的自动排序
oracle9i中用group by之后,会自动排序。
oracle10g中如果不设置优化器,用group by后不会自动排序。

想请教下,如果用oracle9i,例如:
select a,b,c from table
group by a,b,c;
它会隐含包含一个order by a,b,c?还是隐含包含一个order by a?

因为我看到有人说9i中会按照group by后的第一列进行排序,如果group by有多列,那仅按照第一列排序还是依次按照多列排序呢?谢谢!

------解决方案--------------------
我的9I
测试了下,GROUP BY A,B,C 相当于
GROUP BY A,B,C
ORDER BY ABC
------解决方案--------------------
9i 可以用group by代替来达到排序目的 
 
10g做了改变。不要期望用group by 的输出是排序的,Oracle不保证这一点。用order by才会保证。
如果期望在10中group by 与9i一样的行为,将隐含参数"_gby_hash_aggregation_enabled"设置为FALSE
 
在10g 10.2.1版本中测试隐含参数,并不能生效;
在11g 11.1.0.6.0 版本中测试隐含参数,能生效;