# 9.22.窗口功能

窗口功能提供跨与当前查询行相关的行集执行计算的能力。看见第3.5节有关此功能的介绍,以及第4.2.8节语法细节。

中列出了内置窗口功能表9.62.注意这些功能必须可以使用窗口函数语法调用,即结束条款是必需的。

除这些函数外,任何内置或用户定义的普通聚合(即非有序集合或假设集合聚合)都可以用作窗口函数;看见第9.21节查看内置聚合的列表。聚合函数仅在结束第条紧随号召;否则,它们将充当普通聚合,并为整个集合返回一行。

表9.62.通用窗口功能

作用

描述
排号() →比金

返回其分区内当前行的编号,从1开始计算。
等级() →比基特

返回当前行的秩,带间隙;就是排号在同级组的第一排。
密秩 () → 比基特

返回当前行的排名,不带空格;该功能可以有效地统计同级组。
排名百分比 () → 双精度

返回当前行的相对秩,即(等级-1)/(总分区行数-1)。因此,该值的范围为0到1(含0到1)。
库姆区 () → 双精度

返回累积分布,即(位于当前行之前或与当前行对等的分区行数)/(总分区行数)。因此,该值的范围为1/*N*1.
安提尔 ( 桶数 整数 ) → 整数

返回一个从1到参数值的整数,尽可能等分分区。
缓慢移动(价值 任何兼容的[,抵消 整数 [,默认*任何兼容的]] ) →任何兼容的

退货
价值在行进行评估抵消分区内当前行之前的行;如果没有这样的行,则返回默认(它必须是与兼容的类型价值)。两个都抵消默认相对于当前行进行评估。如果省略,抵消默认为 1 和默认*到空值.
带领(价值 任何兼容的[,抵消 整数 [,默认*任何兼容的]] ) →任何兼容的

退货
价值在行进行评估抵消分区内当前行之后的行;如果没有这样的行,则返回默认(它必须是与兼容的类型价值)。两个都抵消默认相对于当前行进行评估。如果省略,抵消默认为 1 和默认*到空值.
第一个值 ( 价值 任何元素 ) → 任何元素

退货*价值*在作为窗口框架的第一行的行进行评估。
最后一个值 ( 价值 任何元素 ) → 任何元素

退货*价值*在作为窗口框架的最后一行的行进行评估。
nth_value ( 价值 任何元素, n 整数) →任何元素

退货*价值在是n*' 窗框第 1 行(从 1 开始计数);返回空值如果没有这样的行。

列出的所有功能表 9.62取决于指定的排序顺序订购方式相关窗口定义的子句。仅考虑订购方式据说列是同行.四个排名函数(包括cume_dist) 被定义,以便它们为对等组的所有行给出相同的答案。

注意第一个值,最后一个值, 和nth_value只考虑“窗口框架”内的行,默认情况下包含从分区开始到当前行的最后一个对等点的行。这可能会给最后一个值有时也nth_value.您可以通过添加合适的框架规范来重新定义框架(范围,或者) 到超过条款。看第 4.2.8 节有关框架规格的更多信息。

当聚合函数用作窗口函数时,它聚合当前行窗口框架内的行。与一起使用的聚合订购方式并且默认的窗口框架定义会产生一种“运行总和”类型的行为,这可能是也可能不是我们想要的。要获得整个分区的聚合,请省略订购方式或使用前无界和后无界之间的行.可以使用其他框架规格来获得其他效果。

# 笔记

SQL 标准定义了一个尊重空值或者忽略空值选项带领,落后,第一个值,最后一个值, 和nth_value.这在 PostgreSQL 中没有实现:行为总是与标准的默认值相同,即尊重空值.同样,该标准的从一开始要么从最后选项nth_value未实现:只有默认从一开始支持行为。(你可以达到的结果从最后通过扭转订购方式订购。)