groupby 返回结果何时有序

请教一下groupby的结果表有时候是按照groupby的字段排过序的,有时候是没排序的,这个有什么规则嘛?

y=1..15
factor1=3.2 1.2 5.9 6.9 11.1 9.6 1.4 7.3 2.0 0.1 6.1 2.9 6.3 8.4 5.6
factor2=1.7 1.3 4.2 6.8 9.2 1.3 1.4 7.8 7.9 9.9 9.3 4.6 7.8 2.4 8.7
id=take(3 2 1, 15);
t=table(id, y, factor1, factor2);
select mean(factor1) from t group by id

就最简单的这种情形都不是保序的,但我使用过程中某些场景下发现会自动排序。场景是对一张没有分区的内存表group by,原表的分组列是乱序的,但group by之后会自动排序。这是什么原因?

请先 登录 后评论

1 个回答

veryOrdinary

group by有多种不同的实现,大体上说有两种算法,第一种是hash group,一种是sort group,前者不会排序,后者会排序。一般来说,hash group的效率更高,性能更好,所以能用hash group的话会优先用hash group。

在标准sql的定义中,除非加order by,否则返回的数据本身是不保证顺序,要保证顺序的话还是建议显示地order by。

请先 登录 后评论