窗口函数也就是在满足某种条件的记录集合上执行的特殊函数。对于每条记录都要在此窗口内执行,窗口的大小是固定的,这种属于静态窗口;不同的记录对应着不同的窗口,这种动态变化的窗口叫做滑动窗口。

窗口函数的基本用法如下:

函数名(开窗字段) over(子句)

其中over是关键字,用来指定函数执行的窗口范围,包含三个分析子句:

  • 分组(partition by)子句类似group by
  • 排序(order by)子句
  • 窗口(rows)子句

如果后面的括号中什么都不写,则意味着窗口包含满足where条件的所有行,窗口函数基于所有行进行计算;如果不为空,则支持以下语法来设置窗口:

函数名() over(partition by<要分组的字段> over by <要排序的字段> rows between <数据范围>)

如:

sum(A) over(partition by B order by C rows between D1 and D2)

A:需要被加工的字段名称

B:分组的字段名称

C:排序的字段名称

D:计算的行数范围

# 取当前行和前面所有行
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

窗口函数的应用

1,专有窗口函数

  • rank() : 排序结果为:1,1,3,4,5
  • row_number():排序结果为:1,2,3,4,5
  • dense_rank():排序结果为:1,1,2,3,4

2.聚合类窗口函数

聚合函数一般和group by一起使用,但是窗口环境下,聚合函数也可以应用进来,那么此时就是聚合类窗口函数。

sum(),count(),avg(),max(),min()

 

 posted on 2024-05-05 10:47  会飞的金鱼  阅读(95)  评论(0)    收藏  举报