窗口函数提供了一种能力,可以在与当前查询行相关的行集上执行计算。有关此功能的介绍,请参阅第 3.5 节,有关语法细节,请参阅第 4.2.8 节。
内置的窗口函数列在表 9.67中。请注意,这些函数必须使用窗口函数语法调用,即需要OVER
子句。
除了这些函数之外,任何内置的或用户定义的普通聚合函数(即,不是有序集或假设集聚合函数)都可以用作窗口函数;有关内置聚合函数的列表,请参阅第 9.21 节。聚合函数仅在调用后面跟有OVER
子句时才作为窗口函数;否则,它们将作为普通聚合函数,并为整个集合返回一行。
表 9.67. 通用窗口函数
表 9.67 中列出的所有函数都依赖于与相关窗口定义关联的ORDER BY
子句指定的排序顺序。仅考虑ORDER BY
列时,不重复的行被称为同级。四个排名函数(包括cume_dist
)的定义方式是,它们对同级组中的所有行给出相同的结果。
请注意,first_value
、last_value
和nth_value
仅考虑“窗口帧”中的行,该帧默认包含从分区开始到当前行的最后一个同级行的所有行。对于last_value
,有时对于nth_value
,这可能会给出无用的结果。您可以通过在OVER
子句中添加合适的帧规范(RANGE
、ROWS
或GROUPS
)来重新定义帧。有关帧规范的更多信息,请参阅第 4.2.8 节。
当聚合函数用作窗口函数时,它会在当前行的窗口帧内的行上进行聚合。ORDER BY
和默认窗口帧定义一起使用的聚合会产生“运行总计”类型的行为,这可能符合也可能不符合您的预期。要获得整个分区的聚合,请省略ORDER BY
或使用ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
。其他帧规范可用于获得其他效果。
SQL标准为lead
、lag
、first_value
、last_value
和nth_value
定义了RESPECT NULLS
或IGNORE NULLS
选项。这在PostgreSQL中没有实现:行为始终与标准的默认值相同,即RESPECT NULLS
。同样,标准的FROM FIRST
或FROM LAST
选项对于nth_value
也没有实现:仅支持默认的FROM FIRST
行为。(您可以[::-end-of-string]通过反转ORDER BY
排序来实现FROM LAST
的结果。)
如果您在文档中发现任何不正确、与您在使用特定功能时的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。