On this page
9.21. 窗口功能
窗口函数提供了跨与当前查询行相关的行集执行计算的功能。有关此功能的介绍,请参见Section 3.5,有关语法的详细信息,请参见Section 4.2.8。
内置窗口功能在Table 9.57中列出。请注意,必须使用窗口函数语法来调用这些函数,即需要OVER
子句。
除这些功能外,任何内置或用户定义的通用或统计聚合(即非有序集或假设集的聚合)都可以用作窗口函数;有关内置聚合的列表,请参见Section 9.20。仅当调用OVER
子句时,聚合函数才充当窗口函数。否则,它们将充当非窗口聚合,并为整个集合返回一行。
表 9.57. 通用窗口功能
Table 9.57中列出的所有功能取决于关联窗口定义的ORDER BY
子句指定的排序 Sequences。仅考虑ORDER BY
列时没有区别的行称为* peers *。定义了四个排名函数(包括cume_dist
),以便它们对所有对等行给出相同的答案。
请注意,first_value
,last_value
和nth_value
仅考虑“窗口框架”中的行,默认情况下,这些窗口包含从分区开始到当前行的最后一个对等方的行。这可能会给last_value
有时甚至是nth_value
带来不利的结果。您可以通过在OVER
子句中添加合适的框架规范(RANGE
或ROWS
)来重新定义框架。有关框架规格的更多信息,请参见Section 4.2.8。
当将聚合函数用作窗口函数时,它将在当前行的窗口框架内的行上聚合。与ORDER BY
和默认窗口框架定义一起使用的聚合会产生“运行总和”类型的行为,这可能是或可能不是想要的。要获得整个分区上的聚合,请省略ORDER BY
或使用ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
。其他框架规格可用于获得其他效果。
Note
SQL 标准为lead
,lag
,first_value
,last_value
和nth_value
定义了RESPECT NULLS
或IGNORE NULLS
选项。这在 PostgreSQL 中未实现:行为始终与标准的默认值RESPECT NULLS
相同。同样,未实现nth_value
的标准FROM FIRST
或FROM LAST
选项:仅支持默认的FROM FIRST
行为。 (您可以通过颠倒ORDER BY
的 Sequences 来获得FROM LAST
的结果.)
cume_dist
计算小于或等于当前行及其对等行的分区行的分数,而percent_rank
假设当前行不在分区中,则计算小于当前行的分区行的分数。