Oracle partition by快速理解与使用区别于group by相关
快速理解:
group by 使用一个(多个)含重复数据的字段进行表数据合算(聚合),结果集展示聚合结果。
partition by 同样适用于含重复数据的一个(多个)字段,但是不进行聚合,只是在结果集相同的数据摆在一起。
例如:下图sql语句,不需要考虑表是什么样的(选择客户编号KHBH,并partition by客户编号)。
结果集:查询部分数据集如下,可以看到,相同的KHBH被放置在了一起。
此外多提一嘴,使用group by时,除了被视为分组对象的字段,其他字段要使用聚合函数。group by后多行缩为一行,如果没有聚合函数,将会无法将多行数据放入一行产生报错。
而partition by展示多行,因此不需要聚合函数,但是!必须使用order by!因为分完组必须确认顺序。原因是partition by是over()函数的内部语句,over()用于max()/min()/rank()/lead()/lag()等函数的条件描述,而这些函数一旦缺少排序将失去意义。(本来也是,你都不排序,你咋求最大最小,但是排序的字段你可以自行决定)