网站建设中 模版下载,河南营销型网站,wordpress 无法自定义,婚纱摄影在哪个网站找概述 窗口函数#xff08;window functions#xff09;也叫开窗函数、OLAP函数。 如果函数具有over子句#xff0c;则它是窗口函数 窗口函数可以简单地解释为类似于聚合函数的计算函数#xff0c;但是通过group by 子句组合的 常规聚合会隐藏正在聚合的各个…概述 窗口函数window functions也叫开窗函数、OLAP函数。 如果函数具有over子句则它是窗口函数 窗口函数可以简单地解释为类似于聚合函数的计算函数但是通过group by 子句组合的 常规聚合会隐藏正在聚合的各个行最终输出一行窗口函数聚合后还可以访问当中的 各个行并且可以将这些行中的某些属性添加到结果集中
实例
数据 cookie1,2021-05-10,1 cookie1,2021-05-11,5 cookie1,2021-05-12,7 cookie1,2021-05-13,3 cookie1,2021-05-14,2 cookie1,2021-05-15,4 cookie1,2021-05-16,4 cookie2,2021-05-10,2 cookie2,2021-05-11,3 cookie2,2021-05-12,5 cookie2,2021-05-13,6 cookie2,2021-05-14,3 cookie2,2021-05-15,9 cookie2,2021-05-16,7 建表语句 create table if not exists website_pv
(cookieid string,createtime string,pv int
)row format delimited fields terminated by ,; --插入数据 load data inpath /website_pv.txt into table website_pv; sumgroup by 常规聚合操作 sum窗口函数聚合操作 窗口表达式
在 sum(pv) over (partition by cookieid order by createtime) 语法完整的情况下进行累积聚合操作默认累积聚合行为是从第一行聚合到当前行 window expression 窗口表达式给我们提供了一种控制行范围的能力比如向前2行向后3行语法如下 关键字是 rows between... and ... ,包括下面这几个选项 PRECEDING往前 FOLLOWING往后 CURRENT ROW当前行 UNBOUNDED起点UNBOUNDED PRECEDING 表示从前面的起点UNBOUNDED FOLLOWING表示到后面的终点窗口排序函数
row_number()、rank()、dense_rank()
适用场景 适合topN业务分析 row_number():在每个分组中为每行分配一个从1开始的唯一序列号递增不考虑重复 rank()在每个分组中为每行分配一个从1开始的序列号考虑重复挤占后续位置 dense_rank()在每个分组中为每行分配一个从1开始的序列号考虑重复不挤占后续位置 需求找出每个用户访问pv最多的Top3重复并列的不考虑 ntile()
将每个分组内的数据分为指定的若干个桶里分为若干个部分并且为每一个桶分配一个桶编号
如果不能平均分配则优先分配较小编号的桶并且各个桶中能放的行数最多相差1 窗口分析函数 lag(col,n,default):用于统计窗口内往上第n行值 第一个参数为列名第二个参数为往上第n行可选默认为1第三个参数为默认值当往上第n行为null时取默认值如果不指定则为null lead(col,n,default):用于统计窗口内往下第n行值 第一个参数为列名第二个参数为往下第n行可选默认为1第三个参数为默认值当往下第n行为null时取默认值如果不指定则为null first_value:取分组内排序后截止到当前行第一个值 last_value:取分组内排序后截止到当前行最后一个值