本文基于impala3.2版本,所有的内置开窗分析函数;
一、补充概念说明
1、什么是开窗函数?
开窗函数是为行定义一个窗口(一个窗口里面是需要操作的行的集合),然后对窗口的行的组合值进行操作,不需要使用group by进行分区,能够在一行里面返回基础行的列和聚合列(简单来说就是结果多出一列聚合值,函数里面带有over)
2、开窗函数的分类?
一般分为“排名开窗函数” 和 “聚合开窗函数”
3、本章节中使用的表格数据如下:表名 student_score
二、排名开窗函数
1、排名开窗函数的使用语法
Function(args,…argn) OVER(【PARTITION BY <…>】【ORDER BY <…>】【<window_clause>】)
可以单独使用order by ,也可以和partition by 一起使用;window_clause是指窗口的范围;
2、排名开窗函数(排名函数)
示例如下:
3、排名开窗函数(切片函数)
示例如下:
4、排名开窗函数(序列分析函数)
示例如下:
5、排名开窗函数(lead+lag)
示例如下:
第一个参数是列名,第二个参数是指往上/下第n行(可选,默认为1),第三个参数为默认值(往上往下为null的时候取默认值,否则取null)
6、排名开窗函数(first_value+last_value)
示例如下:
last_value默认的窗口范围是:rows between unbounded preceding and current row(当前行数据与当前行之前的数据的比较);
所以如果要去当前行与整个分组的数据比较需要加上:rows between unbounded preceding and unbounded following
三、聚合开窗函数
1、聚合开窗函数的使用语法
Function(args,…argn) OVER(【PARTITION BY <…>】【ORDER BY <…>】【<window_clause>】)
聚合开窗函数能使用partition by ; order by 一般配合window_clause(指窗口的范围)一起使用;
2、聚合开窗函数
示例如下: