すべてのプロダクト
Search
ドキュメントセンター

PolarDB:Window 関数

最終更新日:May 31, 2024

このトピックでは、PolarDB for PostgreSQL (Compatible with Oracle) でサポートされているウィンドウ関数について説明します。

ウィンドウ関数は、現在のクエリ行に関連する行のセットにわたって計算を実行する機能を提供します。

組み込みウィンドウ関数を次の表に示します。 これらの関数は、ウィンドウ関数構文を使用して呼び出される必要があります。つまり、OVER句が必要です。

これらの関数に加えて、任意の組み込みまたはユーザ定義の通常の集合体 (すなわち、順序付けられた集合体または仮想集合体ではない) をウィンドウ関数として使用することができる。 集計関数は、OVER句が呼び出しに続く場合にのみウィンドウ関数として機能します。それ以外の場合は、単純な集計として機能し、セット全体の1行を返します。

汎用ウィンドウ関数

row_number () → bigint

パーティション内の現在の行の数を1から返します。

rank () → bigint

ギャップを持つ現在の行のランクを返します。つまり、ピアグループの最初の行のrow_numberです。

dense_rank () → bigint

ギャップなしで現在の行のランクを返します。この関数は、ピアグループを効果的にカウントします。

percent_rank () → double precision

現在の行の相対ランクを返します。つまり、(rank- 1) / (total partition rows - 1) です。 したがって、値は0〜1の範囲である。

cume_dist () → double precision

累積分布を返します。つまり、(現在の行の前またはピアのパーティション行の数) / (パーティション行の合計) です。 したがって、値は1/ Nから1の範囲である。

ntile (num_buckets integer) → integer

1から引数値までの範囲の整数を返し、パーティションをできるだけ均等に分割します。

lag (value anycompatible [, offset integer [, default anycompatible ]] ) → anycompatible

パーティション内の現在の行の前に行がオフセットされている行で評価されたvalueを返します。そのような行がない場合は、default (valueと互換性のある型である必要があります) を返します。 offsetdefaultの両方が、現在の行に対して評価されます。 省略した場合、offsetは1に、defaultNULLになります。

lead (value anycompatible [, offset integer [, default anycompatible ]] ) → anycompatible

パーティション内の現在の行の後に行がオフセットされている行で評価されたvalueを返します。そのような行がない場合は、default (valueと互換性のある型である必要があります) を返します。 offsetdefaultの両方が、現在の行に対して評価されます。 省略した場合、offsetは1に、defaultNULLになります。

first_value (value anyelement) → anyelement

ウィンドウフレームの最初の行で評価されたを返します。

last_value (value anyelement) → anyelement

ウィンドウフレームの最後の行で評価されたを返します。

nth_value (value anyelement, n integer) → anyelement

ウィンドウフレームのn番目の行で評価されたvalueを返します (1から数えます) 。そのような行がない場合はNULLを返します。

上の表にリストされているすべての関数は、関連するウィンドウ定義のORDER by句で指定されたソート順序に依存します。 ORDER BY列のみを考慮するときに区別されない行は、ピアであると言われる。 4つのランキング関数 (cume_distを含む) は、ピアグループのすべての行に対して同じ答えを与えるように定義されています。

first_valuelast_value、およびnth_valueは、デフォルトでパーティションの先頭から現在の行の最後のピアまでの行を含む「ウィンドウフレーム」内の行のみを考慮することに注意してください。 これは、last_valuenth_valueにも役に立たない結果をもたらす可能性があります。 適切なフレーム仕様 (RANGEROWS、またはGROUPS) をOVER句に追加することで、フレームを再定義できます。

集計関数がウィンドウ関数として使用される場合、現在の行のウィンドウフレーム内の行を集計します。 ORDER BYとデフォルトのウィンドウフレーム定義で使用される集計では、「ランニングサム」タイプの動作が生成されます。 パーティション全体の集計を取得するには、ORDER BYを省略するか、[未完了の事前定義と未完了の後続の行] を使用します。 他のフレーム仕様を使用して他の効果を得ることができる。

重要

SQL標準では、leadlagfirst_valuelast_value、およびnth_valueRESPEECT NULLSまたはIGNORE NULLSオプションを定義します。 これはPostgreSQLでは実装されていません。動作は常に標準のデフォルト、つまりRESPECT NULLSと同じです。 同様に、標準のnth_valueFROM FIRSTまたはFROM LASTオプションは実装されていません。デフォルトのFROM FIRST動作のみがサポートされています。 (ORDER byの順序を逆にすることで、FROM LASTの結果を達成できます。)