什么是窗口函数
窗口函数(Window Function)为每行数据进行一次计算:操作多行数据(一个窗口),返回一个值。
普通聚合函数只能用来计算一行内的结果,或把所有行聚合成一行结果。窗口函数则可以跨行计算,并把结果填到到每一行中。
为什么需要窗口函数
窗口函数是SQL2003标准中定义的新特性,主流数据库都有对窗口函数的支持。
窗口函数又被称为OLAP函数,在报表分析的查询中发挥了重要作用。
窗口函数能解决普通函数和聚合函数没法直接完成的事情,加快数据的分析。
在鸿鹄中如何使用窗口函数
语法
PARTITION BY:表示数据先按照partition_by_list进行分区
ORDER BY:表示在各个分区内按照order_by_list进行排序
ROWS BETWEEN:表示在计算的时候选取的行,例如下面的示例选取当前行和前一行
其中frame_start/frame_end的语法为:
在没有指定窗口框架子句(frame_clause)的情况下,默认的frame和是否有ORDER BY有关
-
有ORDER BY,默认的frame包含从当前分区开始到当前行,等价于:
-
没有ORDER BY,默认的frame包含当前分区的所有行,等价于:
窗口函数分类
窗口函数主要分为聚合和非聚合两大类:
窗口函数的最佳实践
以下数据集ev_sales是新能源汽车厂商nio和xp在2022年1-5月的销量数据,下面的示例是基于此数据集演示窗口函数在查询分析中用法。
需求:查看厂商每个月的累积销量
需求:计算每个月环比增速
其他参考资料