窗口函数——聚合「summaxminavg」
以SUM为例子:(max、min、avg同理)
sum(求和字段) over (partition by 分组字段 order by 排序字段 rows between unbounded preceding and current row) as pv1
关键是理解ROWS BETWEEN含义,也叫做WINDOW子句:
窗口帧
作用是用于调整窗口大小
(ROWS | RANGE) BETWEEN (UNBOUNDED | [num]) PRECEDING AND ( CURRENT ROW )| (UNBOUNDED | [num]) FOLLOWING)
UNBOUNDED :表示没有限制
num:具体行值或数据值
PRECEDING: 往前取
CURRENT ROW : 表示当前行
FOLLOWING:往后取值
窗口取行
- lag/lead
LAG(col,n,default):往前第n行数据,default如果参数不给,那么默认返回NULL
LEAD(col,n,default):往后第n行数据
- FIRST_VALUE /LAST_VALUE
FIRST_VALUE:取分组内排序后,截止到当前行,第一个值
LAST_VALUE:取分组内排序后,截止到当前行,最后一个值,对于并列的排名,取最后一个
非常重要
排名函数
- row_number函数
- rank/dense_rank
- percent_rank/ cume_dist/NTILE
– 三者的不同点
① row_number() 排名连续 不重复
② dense_rank() 排名连续 且重复
③ rank() 排名不连续 且重复