このトピックでは、PolarDB for PostgreSQL (Compatible with Oracle) でサポートされているウィンドウ関数について説明します。
ウィンドウ関数は、現在のクエリ行に関連する行のセットにわたって計算を実行する機能を提供します。
組み込みウィンドウ関数を次の表に示します。 これらの関数は、ウィンドウ関数構文を使用して呼び出される必要があります。つまり、OVER句が必要です。
これらの関数に加えて、任意の組み込みまたはユーザ定義の通常の集合体 (すなわち、順序付けられた集合体または仮想集合体ではない) をウィンドウ関数として使用することができる。 集計関数は、OVER句が呼び出しに続く場合にのみウィンドウ関数として機能します。それ以外の場合は、単純な集計として機能し、セット全体の1行を返します。
汎用ウィンドウ関数
パーティション内の現在の行の数を1から返します。 |
ギャップを持つ現在の行のランクを返します。つまり、ピアグループの最初の行の |
ギャップなしで現在の行のランクを返します。この関数は、ピアグループを効果的にカウントします。 |
現在の行の相対ランクを返します。つまり、( |
累積分布を返します。つまり、(現在の行の前またはピアのパーティション行の数) / (パーティション行の合計) です。 したがって、値は1/ |
1から引数値までの範囲の整数を返し、パーティションをできるだけ均等に分割します。 |
パーティション内の現在の行の前に行が |
パーティション内の現在の行の後に行が |
ウィンドウフレームの最初の行で評価された |
ウィンドウフレームの最後の行で評価された |
ウィンドウフレームの |
上の表にリストされているすべての関数は、関連するウィンドウ定義のORDER by句で指定されたソート順序に依存します。 ORDER BY列のみを考慮するときに区別されない行は、ピアであると言われる。 4つのランキング関数 (cume_distを含む) は、ピアグループのすべての行に対して同じ答えを与えるように定義されています。
first_value、last_value、およびnth_valueは、デフォルトでパーティションの先頭から現在の行の最後のピアまでの行を含む「ウィンドウフレーム」内の行のみを考慮することに注意してください。 これは、last_valueやnth_valueにも役に立たない結果をもたらす可能性があります。 適切なフレーム仕様 (RANGE、ROWS、またはGROUPS) をOVER句に追加することで、フレームを再定義できます。
集計関数がウィンドウ関数として使用される場合、現在の行のウィンドウフレーム内の行を集計します。 ORDER BYとデフォルトのウィンドウフレーム定義で使用される集計では、「ランニングサム」タイプの動作が生成されます。 パーティション全体の集計を取得するには、ORDER BYを省略するか、[未完了の事前定義と未完了の後続の行] を使用します。 他のフレーム仕様を使用して他の効果を得ることができる。
SQL標準では、lead、lag、first_value、last_value、およびnth_valueのRESPEECT NULLSまたはIGNORE NULLSオプションを定義します。 これはPostgreSQLでは実装されていません。動作は常に標準のデフォルト、つまりRESPECT NULLSと同じです。 同様に、標準のnth_valueのFROM FIRSTまたはFROM LASTオプションは実装されていません。デフォルトのFROM FIRST動作のみがサポートされています。 (ORDER byの順序を逆にすることで、FROM LASTの結果を達成できます。)