ウィンドウ関数は現在の問い合わせ行に関連した行集合に渡っての計算処理機能を提供します。 この機能の手引きは3.5を、文法の詳細は4.2.8を参照してください。
組み込みウィンドウ関数は表 9.57に一覧されています。
これらの関数は必ずウィンドウ関数構文で呼び出されなければなりません。つまり、OVER句が必要です。
これらの関数に加え、どんな組み込み、またはユーザ定義の汎用集約関数または統計集約関数もウィンドウ関数として使用できます(ただし順序集合や仮想集合集約はそうではありません)。組み込み集約関数一覧は9.20を参照してください。
集約関数は、呼び出しの後にOVER句が続いた場合のみウィンドウ関数として動作します。それ以外の場合は、非ウィンドウの集約関数として動作し、集合全体に対して1行だけを返します。
表9.57 汎用ウィンドウ関数
表 9.57に列挙された関数はすべて、対応するウィンドウ定義のORDER BY句で指定されるソート順に依存します。
ORDER BYの列だけを考慮した場合に重複する行はピアと呼ばれます。
4つの順位付け関数(cume_distを含む)は、すべてのピア行に対して同じ答えになるように定義されています。
first_value、last_value、nth_value関数は「ウィンドウフレーム」内の行のみを考慮することに注意してください。
デフォルトで、ウィンドウフレームにはパーティションの先頭から現在の行の最終ピアまでの行が含まれます。
これはlast_value、または時々nth_valueでは有用ではない結果を得ることになりがちです。
OVER句に適切なフレーム指定(RANGE、GROUP、もしくはROWS)を加えることで、フレームを再定義することができます。
フレーム指定についての詳細は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です。同様にして、標準のnth_valueに対するFROM FIRST、またはFROM LASTオプションは実装されていません。デフォルトのFROM FIRST動作のみに対応しています。
(ORDER BY順序付けを逆に行うことで、FROM LASTの結果を得ることができます。)
cume_distが現在行およびそのピアより小さいか等しいパーティション行の割合を計算するのに対し、percent_rankは現在行がそのパーティション内にないものとして、現在行より小さいパーティション行の割合を計算します。