实践
备注:不支持window字句
1:LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值。第一个参数为列名, 第二个是窗口内的第几列,第三个为默认值,当取值为null时就取这个值。
2:LAG(col,n,DEFAULT) 与Lead相反,原理和Lead一致,区别点是在Lag窗口内按照倒序取
案例一:有一个用户访问的日志记录表,求用户访问每个页面时长,当前页面与第三个页面的时长
3: first_value 与Last_value
1:first_value 取窗口内第一行
2:Last_value 取窗口内最后一行,
select uname,create_time,pv ,
row_number() over (partition by uname order by create_time ) as rn,-- 给窗口内数据排序
first_value(pv) over (partition by uname order by create_time asc ) as first_rn, – 取窗口内的第一行
last_value(pv) over (partition by uname order by create_time desc ) as last_rn – 取窗口内最后一行
from window_temp
还可以对窗口内的数据求聚合运算,适合求占比、求与均值差异的运算
窗口函数里的关键字:
preceding: 往前
current row: 当前行
following: 往后
unbounded: 起点,UNBOUNDED PRECEDING 表示从前面的起点,UNBOUNDED FOLLOWING,表示到后面的终点行
功能:这几个函数主要用于对窗口内数据排名,这几个函数不支持chuangkou
NTILE: 切片函数,用于将数据按照顺序切片,如果切片不均匀,默认增加第一个切片的分布
备注:不支持window字句
1:cume_DIST 统计小于等于当前值的行数/分组内的总行数,
应用场景:统计小于等于当前薪水的人数,所占总人数的比例
2:percent_rank 分组内当前行的RANK值-1/分组内总行数-1
应用场景不了解,可能在一些特殊算法的实现中可以用到吧。