PostgreSQL 9.6.5文書 | |||
---|---|---|---|
前のページ | 上に戻る | 第 9章関数と演算子 | 次のページ |
ウィンドウ関数は現在の問い合わせ行に関連した行集合に渡っての計算処理機能を提供します。 この機能の手引きは項3.5を、文法の詳細は項4.2.8を参照してください。
組み込みウィンドウ関数は表9-56に一覧されています。 これらの関数は必ずウィンドウ関数構文で呼び出されなければなりません。つまり、OVER句が必要です。
これらの関数に加え、どんな組み込み、またはユーザ定義の通常の集約関数もウィンドウ関数として使用できます(ただし順序集合や仮想集合集約はそうではありません)。組み込み集約関数一覧は項9.20を参照してください。 集約関数は、呼び出しの後にOVER句が続いた場合のみウィンドウ関数として動作します。それ以外の場合は、通常の集約関数として動作します。
表 9-56. 汎用ウィンドウ関数
関数 | 戻り値 | 説明 |
---|---|---|
row_number()
| bigint | 現在行のパーティション内での行番号(1から数える) |
rank()
| bigint | ギャップを含んだ現在行の順位。先頭ピアのrow_number と同じになる。 |
dense_rank()
| bigint | ギャップを含まない現在行の順位。この関数はピアのグループ数を数える。 |
percent_rank()
| double precision | 現在行の相対順位。 (rank - 1) / (総行数 - 1) |
cume_dist()
| double precision | 現在行の相対順位。 (現在行より先行する行およびピアの行数) / (総行数) |
ntile(num_buckets integer)
| integer | できるだけ等価にパーティションを分割した、1から引数値までの整数 |
lag(value anyelement
[, offset integer
[, default anyelement ]])
| valueと同じ型 | パーティション内の現在行よりoffset行だけ前の行で評価されたvalueを返す。 該当する行がない場合、その代わりとしてdefault(valueと同じ型でなければならない)を返す。 offsetとdefaultは共に現在行について評価される。 省略された場合、offsetは1となり、defaultはNULLになる。 |
lead(value anyelement
[, offset integer
[, default anyelement ]])
| valueと同じ型 | パーティション内の現在行よりoffset行だけ後の行で評価されたvalueを返す。 該当する行がない場合、その代わりとしてdefault(valueと同じ型でなければならない)を返す。 offsetとdefaultは共に現在行について評価される。 省略された場合、offsetは1となり、defaultはNULLになる。 |
first_value(value any)
| valueと同じ型 | ウィンドウフレームの最初の行である行で評価されたvalue を返す |
last_value(value any)
| valueと同じ型 | ウィンドウフレームの最後の行である行で評価されたvalue を返す |
nth_value(value any, nth integer)
| valueと同じ型 | ウィンドウフレームの(1から数えて)nth番目の行である行で評価されたvalueを返す。行が存在しない場合はNULLを返す |
表9-56に列挙された関数はすべて、対応するウィンドウ定義のORDER BY句で指定されるソート順に依存します。 ORDER BY順で重複する行はピアと呼ばれます。 4つの順位付け関数は、任意の2つのピア間で同じ答えになるように定義されています。
first_value
、last_value
、nth_value
関数は"ウィンドウフレーム"内の行のみを考慮することに注意してください。
デフォルトで、ウィンドウフレームにはパーティションの先頭から現在の行の最終ピアまでの行が含まれます。
これはlast_value
、または時々nth_value
では有用ではない結果を得ることになりがちです。
OVER句に適切なフレーム指定(RANGEもしくは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の結果を得ることができます。)