加载中...

窗口函数(Window Function)是 SQL:2003 标准引入的分析函数,通过 OVER 子句定义一个"窗口"(与当前行相关的行集合),在该窗口上进行计算,同时保留每一行的输出,而不像聚合函数那样把多行折叠成一行。
窗口由三部分定义:PARTITION BY 划分分组、ORDER BY 指定窗口内排序、frame 子句(如 ROWS BETWEEN)限定计算范围。常用函数包括 ROW_NUMBER()、RANK()、DENSE_RANK()、LAG()、LEAD(),以及作为窗口函数使用的 SUM()、AVG() 等聚合函数。
典型场景包括分组内取 Top-N、计算同比环比、累计求和、移动平均、去重取最新一条记录等。在窗口函数出现之前,这类需求往往需要自连接或关联子查询,语句复杂且性能差。
PostgreSQL、Oracle、SQL Server 很早即支持;MySQL 自 8.0 起支持;主流分析引擎(Hive、Spark SQL、ClickHouse 等)均已实现。窗口函数是现代分析型 SQL 的核心特性之一。

登录 后参与讨论
暂无讨论,来发表第一条评论吧