语法:
Function(arg1 ……) over([partition by arg1 ……] [order by arg1 ……] [<window_expression>])
Function(arg1 ……) 支持的函数:
① 聚合函数(aggregate functions):sum()、max()、min()、avg()等。
② 数据排序函数(sort functions):rank(),row_number()、dens_rank()、ntile()等。
③ 统计和比较函数(analytics functions):lead()、lag()、first_value()等。
Over([partitioin by arg1 ……] [order by arg1 ……]) 解释:
① Partition by:表示将数据先按字段进行分区
② Order by:表示将各个分区内的数据按字段进行排序
Window_expression窗口边界设置
Preceding 往前
Following 往后
Current row 当前行
Unbounded preceding 从前面的起点开始
Unbounded following 到后面的终点结束
使用详解:
① 如果不指定partition by,则不对数据进行分区,换句话说,所有数据看作同一个分区。
② 如果不指定order by, 则不对各分区进行排序,通常用于那些顺序无关的窗口函数,如sum()。
③ 如果不指定窗口子句:
不指定order by,默认使用分区内所有行,等同于
Function() over(rows between unbounded precedeing and unbounded following)
如果指定order by,默认使用分区内第起点到当前行,等同于
Function() over(rows between unbounded preceding and current row)
注意:NTILE、ROW_NUMBER、RANK、DENSE_RANK等序列函数不支持window子句。