Oracle数据库over()函数
基本语法
over(partition by col1 order by col2)
--根据col1分区,然后按照col2排序
该函数不能单独使用,需要与row_number()、rank()、dense_rank()、lag()、lead()和sum()配合使用。
partition by和group by的区别:
group by会对结果按照指定字段进行聚合,结果集会缩减。例如:统计部门人数,总工资等。
partition by会对结果集按照指定字段分层排列,结果集不会缩减。例如:按部门分区。
搭配不同函数的使用效果
-
row_number()、rank()、dense_rank()与
over连用时,order by不能省略,省略partition by将结果集默认为一个分区。row_number() over(partition by col1 order by col2) --按照col1分区,按照col2排序,排序从1开始,遇到相同数据,排名照样增加rank() over(partirion by col1 order by col2) --按照col1分区,按照col2排序,排序从1开始,遇到相同数据,排名相同,排名可能不连续dense_rank() over(partirion by col1 order by col2) --按照col1分区,按照col2排序,排序从1开始,遇到相同数据,排名相同,排名连续 -
lag()、lead()与
over连用时,order by不能省略,省略partition by将结果集默认为一个分区。lag(col3) over(partirion by col1 order by col2) --按照col1分区,按照col2排序,在分区内获取前一行数据的col3字段的值,第一行为空lead(col3) over(partirion by col1 order by col2) --按照col1分区,按照col2排序,在分区内获取后一行数据的col3字段的值,最后一行为空 -
sum()与
over连用时,order by可以省略,省略partition by将结果集默认为一个分区。此处sum不是对整个分区进行求和,而是根据ordey by 后面的字段分区排序之后,求出分区中小于等于自身所在分层等级的和,即连续求和。sum(col3) over(partirion by col1 order by col2) --按照col1分区,按照col2排序,在分区内求出小于等于自身所在分层等级的和,如遇到等级相同的,求和不会增加
Oracle数据库的over()函数用于窗口函数操作,结合row_number()、rank()、dense_rank()、lag()、lead()和sum()等实现复杂的数据分析。over()函数通过partitionby进行分区,保持原始数据量,而groupby则进行聚合操作。row_number()按顺序编号,rank()和dense_rank()处理相同值时的排名,lag()获取前一行数据,lead()获取后一行数据,sum()则进行分区内的累计求和。
3万+

被折叠的 条评论
为什么被折叠?



