視窗函式提供了一種能力,可以在與當前查詢行相關的行集上執行計算。有關此功能的介紹,請參閱第 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
的結果。)
如果您在文件中發現任何不正確、與您在使用特定功能時的體驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。