窗口函数是什么:
窗口函数是一种分析型的OLAP函数,OLAP是online analytical processing的简称,意思是对数据库数据进行实时分析处理。
窗口函数的作用:
用来解决一些排名问题。
窗口函数的基本语法:
<窗口函数> over ( [partition by <分组列名>]
[order by <排序列名>] )
- 排名函数
-
row_number:根据指定的顺序,从1开始计算连续的行号。
-
ntile:函数对一个数据分区中的有序结果集进行划分,将其分成数量大致相等的块,根据输入的块数和指定的窗口进行排序。
-
rank与dense_rank:计算一组数值中的排序值
row_number,rank,dense_rank的区别
rank:并列跳跃排名。生成数据项在分组中的排名,排名相等会在名次中留下空位。例如1、2、2、4、4、6、7、8。
dense_rank:并列连续排名。生成数据项在分组中的排名,排名相等会在名次中不会留下空位,例如1、2、2、3、3、4、4、5。
row_number:连续排名。从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列。例如1、2、3、4、5、6、7。
- 取值函数
-
first_value():取分组内排序后,截止到当前行,第一个值;
-
last_value():取分组内排序后,截止到当前行,最后一个值。
- 分布函数
-
排名分布函数:percent_rank(百分位排名)和cume_dist(累积分布)
-
逆分布函数:percent_cont(百分位连续)和percentile_disc(百分位离散)
- 偏移量函数
-
lag(col,n,default): 用于统计窗口内往上第n行值;
-
lead(col,n,default):与lag相反,用于统计窗口内往下第n行值