工作了好长时间,一直没有写过文章,从今天开始,每天记录自己的学习情况。
(一)标准聚合函数 avg(字段名) over(partition by 字段名 order by 字段名 asc/desc rows between A and B )
影响行数的范围(限定计算移动平均的范围): rows between 2 preceding and current row # 取当前行和前面两行 rows between unbounded preceding and current row # 包括本行和之前所有的行 rows between current row and unbounded following # 包括本行和之后所有的行 rows between 3 preceding and current row # 包括本行和前面三行 rows between 3 preceding and 1 following # 从前面三行和下面一行,总共五行 当order by后面缺少窗口从句条件,窗口规范默认是rows between unbounded preceding and current row. 当order by和窗口从句都缺失, 窗口规范默认是 rows between unbounded preceding and unbounded following
(二)排序窗口函数 rank() over(partition by 字段1 order by 字段2)
dense_rank() over(partition by 字段1 order by 字段2)
row_number() 按照值排序时产生一个自增编号,不会重复(如:1、2、3、4、5、6) rank() 按照值排序时产生一个自增编号,值相等时会重复,会产生空位(如:1、2、3、3、3、6) dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位(如:1、2、3、3、3、4)
(三)分组排序窗口函数 ntile(n) over(partition by 字段名2 order by 字段名3 asc/desc) --n表示要切分的片数,如需要取前25%的用户,则需要分为4组,取前10%的用户,则需要分10组
(四)偏移分析窗口函数 lag(exp_str,offset,defval) over(partition by ... order by...) lead(exp_str,offset,defval) over(partition by ... order by...)
-- exp_str表示字段名称 -- offset偏移量,假设当前行在表中排在第5行,则offset为3,则表示我们所要找的数据行就是表中的第2行(即5-3=2) -- offset默认为1