視窗函數 提供了跨與當前查詢列相關的行集合執行計算的能力。有關此功能的介紹,請參閱第 3.5 節,有關語法詳細信息,請參閱第 4.2.8 節。
內建的視窗函數列於表 9.65。請注意,這些函數必須使用視窗函數語法調用,即需要 OVER
子句。
除了這些函數之外,任何內建或使用者定義的普通彙總(即,非排序集或假設集彙總)都可以用作視窗函數;有關內建彙總的列表,請參閱第 9.21 節。彙總函數僅當 OVER
子句跟在呼叫之後時才充當視窗函數;否則,它們充當普通彙總,並為整個集合返回單列。
表 9.65. 通用視窗函數
在表 9.65中列出的所有函式都取決於相關視窗定義的 ORDER BY
子句指定的排序。僅考慮 ORDER BY
欄位時,不相同的列被稱為同位元素。四個排序函式(包括 cume_dist
)的定義是它們為同位元素群組的所有列提供相同的答案。
請注意,first_value
、last_value
和 nth_value
僅考慮 「視窗框架」 內的列,預設情況下,視窗框架包含從分割區的開頭到目前列的最後一個同位元素的列。這很可能為 last_value
帶來無用的結果,有時也會為 nth_value
帶來無用的結果。您可以透過將適當的框架規範(RANGE
、ROWS
或 GROUPS
)新增到 OVER
子句來重新定義框架。有關框架規範的更多資訊,請參閱第 4.2.8 節。
當彙總函式用作視窗函式時,它會彙總目前列的視窗框架內的列。與 ORDER BY
和預設視窗框架定義一起使用的彙總會產生「滾動總和」類型的行為,這可能不是想要的結果。若要取得整個分割區的彙總,請省略 ORDER BY
或使用 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
。可以使用其他框架規範來取得其他效果。
SQL 標準定義了 RESPECT NULLS
或 IGNORE NULLS
選項,用於 lead
、lag
、first_value
、last_value
和 nth_value
。這未在 PostgreSQL 中實作:其行為始終與標準的預設值相同,即 RESPECT NULLS
。同樣,標準的 FROM FIRST
或 FROM LAST
選項用於 nth_value
未實作:僅支援預設的 FROM FIRST
行為。(您可以透過反轉 ORDER BY
排序來實現 FROM LAST
的結果。)
如果您在文件中發現任何不正確、與特定功能不符或需要進一步說明的內容,請使用此表單來報告文件問題。