窗口函数的格式
window_function ([expression]) OVER (
PARTITION BY ...
ORDER BY ...
frame_clause
)
window_function 是窗口函数的名称,expression是可选的分析对象(字段名或者表达式),OVER子句包含分区(PARTITION BY )、排序(ORDER BY)以及窗口大小(frame_clause)
窗口函数OVER子句中的frame_clause选项用于指定一个移动的分析窗口,窗口总是位于分区的范围之内,是分区的一个子集。在指定了分析窗口之后,窗口函数不再基于分区进行分析而是基于窗口内的数据进行分析。
窗口定义的格式
ROWS BETWEEN 上限 AND 下限
# UNBOUNDED PRECEDING 分区第一行
# UNBOUNDED FLLOWING 分区最后一行
# CURRENT NOW 当前行
# 2 PRECEDING 前两行
# 2 FLLOWING 后两行
窗口函数和聚合函数的不同
聚合函数是将同一个分组内的多行数据汇总成单个结果,窗口函数则保留了所有的原始数据。在某些数据库中,窗口函数也被成为联机分析处理(OLAP)函数,或者分析函数。
窗口函数的使用
移动平均值
累计求和
排名窗口函数
rank:考虑数据的重复性,挤占坑位 1 1 3
dense_rank:考虑数据的重复性,不挤占坑位 1 2 2 3
row_number:没有重复值的排序 1 2 3 4
取值窗口函数
环比增长率
同比增长率