2024年5月23日:PostgreSQL 17 Beta 1发布!
支持的版本:当前(16)/15/14/13/12
开发版本:17/开发
不支持的版本:11/10/9.6/9.5/9.4/9.3/9.2/9.1/9/8.4
本文档适用于不受支持的PostgreSQL版本。
您可能想查看现在的版本,或上面列出的其他受支持版本之一。

9.21.窗口功能

Window函数提供跨与当前查询行相关的行集执行计算的能力。请参见第3.5节有关此功能的介绍,以及第4.2.8节了解语法详细信息。

内置窗口功能列于表9.57注意这些功能必须使用窗口函数语法调用,即超过子句是必需的。

除这些函数外,任何内置或用户定义的通用或统计聚合(即非有序集或假设集聚合)都可以用作窗口函数;看见第9.20节获取内置聚合的列表。聚合函数仅在超过催缴后的条款;否则,它们将充当非窗口聚合,并返回整个集合的一行。

表9.57.通用窗口功能

功能 退货类型 描述
row_number() bigint公司 分区内当前行的编号,从1开始计算
等级() bigint公司 当前有间隙行的秩;等同于行_编号它的第一个同行
密度_等级() bigint公司 当前行的秩(无间隙);此函数用于统计对等组
百分比等级(_rank) 双精度 当前行的相对排名:(等级-1)/(总分区行数-1)
cume_dist() 双精度 累计分布:(当前行之前或与当前行对等的分区行数)/总分区行数
直到(num_buckets(桶数) 整数) 整数 从1到参数值的整数,尽可能等分分区
滞后,滞后(价值 任何元素[,抵消 整数[,违约 任何元素]]) 与相同类型价值 收益价值在以下行进行计算抵消分区内当前行之前的行;如果没有这样的行,则返回违约(必须与价值). 两者都有抵消违约根据当前行进行计算。如果省略,抵消默认为1和违约至零
铅(价值 任何元素[,抵消 整数[,违约 任何元素]]) 与相同类型价值 收益价值在以下行进行计算抵消分区内当前行之后的行;如果没有这样的行,则返回违约(必须与价值). 两者都有抵消违约根据当前行进行计算。如果省略,抵消默认为1和违约到null
第一个值(价值 任何) 与相同类型价值 收益价值在窗口框架的第一行处计算
last_value(最后一个值)(价值 任何) 与相同类型价值 收益价值在窗口框架的最后一行计算
第n个值(价值 任何,第n个 整数) 与相同类型价值 收益价值在作为第n个窗框的行(从1开始计算);如果没有这样的行,则为null

中列出的所有功能表9.57取决于订购依据关联窗口定义的子句。仅考虑订购依据柱据说是同龄人四种排名功能(包括cume_dist文件)定义为对所有对等行给出相同的答案。

请注意第一个值,last_value(最后一个值)、和第n个值只考虑窗框,默认情况下包含从分区开始到当前行的最后一个对等点的行。这可能会给以下方面带来无益的结果last_value(最后一个值)有时也会第n个值。您可以通过添加合适的框架规范来重新定义框架(范围)到超过条款。请参见第4.2.8节有关帧规格的更多信息。

当聚合函数用作窗口函数时,它将聚合当前行窗口框架中的行。与一起使用的聚合订购依据默认的窗口框架定义生成流动资金行为类型,这可能是也可能不是我们想要的。要获得整个分区的聚合,请省略订购依据或使用前无边界和后无边界之间的行。可以使用其他框架规格来获得其他效果。

注释

SQL标准定义了尊重虚无IGNORE NULLS公司的选项领导,滞后,第一个值,last_value(最后一个值)、和第n个值。这在中未实现PostgreSQL:行为始终与标准的默认值相同,即尊重虚无同样,标准从第一个从最后开始的选项第n个值未实现:仅默认从第一个支持行为。(您可以实现自上次通过反转订购依据订购。)

cume_dist文件计算小于或等于当前行及其对等行的分区行的分数,而百分比银行计算小于当前行的分区行的分数,假设当前行不存在于分区中。