ウィンドウ関数の構文の概要 - Amazon Redshift

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

ウィンドウ関数の構文の概要

標準のウィンドウ関数の構文は次のとおりです。

function (expression) OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list [ frame_clause ] ] )

ここで、 機能 は、このセクションで説明する機能の1つであり、 expr_list(expr_リスト) 以下とする。

expression | column_name [, expr_list ]

オーダーリスト 以下とする。

expression | column_name [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] [, order_list ]

フレーム_条項 以下とする。

ROWS { UNBOUNDED PRECEDING | unsigned_value PRECEDING | CURRENT ROW } | {BETWEEN { UNBOUNDED PRECEDING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW} AND { UNBOUNDED FOLLOWING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW }}
注記

STDDEV_SAMP および VAR_SAMP は、それぞれ STDDEV および VARIANCE のシノニムです。

Arguments

function

詳細については、個々の関数の説明を参照してください。

OVER

ウィンドウの指定を定義する句。OVER 句はウィンドウ関数に必須であり、ウィンドウ関数を他の SQL 関数と区別します。

PARTITION BY expr_list

(オプション)PARTITION BY句は、GROUP BY句と同様に、結果セットをパーティションにサブダイブします。パーティション句が存在する場合、関数は各パーティションの行に対して計算されます。パーティション句が指定されていない場合、1 つのパーティションにテーブル全体が含まれ、関数は完全なテーブルに対して計算されます。

ランクづけ関数 DENSE_RANK、NTILE, RANK、および ROW_NUMBER では、結果セットのすべての行でグローバルな比較が必要です。PARTITION BY 句を使用すると、クエリオプティマイザは、パーティションに応じて複数のスライスにワークロードを分散させることにより、個々の集計を並列で実行できます。PARTITION BY 句がない場合、集計ステップを 1 つのスライスで順次実行する必要があり、特に大規模なクラスターではパフォーマンスに大きな悪影響を与えることがあります。

Amazon Redshift は、PARTITION BY句の文字列リテラルをサポートしていません。

ORDER BY order_list

(オプション)ウィンドウ関数は、ORDER BYでの順序指定に従ってソートされた各パーティション内の行に適用されます。この ORDER BY 句は、ウィンドウ関数以外 (OVER 句の外側) の ORDER BY 句とは異なり、完全に無関係です。ORDER BY 句は、PARTITION BY 句なしで使用できます。

ランク付け関数の場合、ORDER BY 句はランク付けの値に使用する基準を特定します。集計関数の場合、パーティションで分割された行は、集計関数がフレームごとに計算される前に順序付けされる必要があります。ウィンドウ関数の種類の詳細については、「ウィンドウ関数。」を参照してください。

列識別子または列識別を検証する式は、順序リストで必要とされます。定数も定数式も、列名の代用として使用することはできません。

NULL 値は独自のグループとして扱われ、NULLS FIRST または NULLS LAST オプションに従ってソートおよびランク付けされます。デフォルトでは、NULL 値は昇順ではソートされて最後にランク付けされ、降順ではソートされて最初にランク付けされます。

Amazon Redshift は、ORDER BY句の文字列リテラルをサポートしていません。

ORDER BY 句を省略した場合、行の順序は不確定になります。

注記

以下のようなあらゆる並列システムにおいて Amazon RedshiftORDER BY句がデータの一意の合計順序を生成しない場合、行の順序は決定的ではありません。つまり、ORDER BY 式が重複した値を生成する場合 (部分的ソート)、これらの行の戻り値の順序は Amazon Redshift の実行によって異なることがあります。そのため、ウィンドウ関数は予期しない結果または矛盾した結果を返す場合があります。詳細については、ウィンドウ関数用データの一意の並び順 を参照してください。

column_name

パーティション化または順序付けされる列の名前。

ASC | DESC

次のように、式のソート順を定義するオプション:

  • ASC: 昇順 (数値の場合は低から高、文字列の場合は「A」から「Z」など) オプションを指定しない場合、データはデフォルトでは昇順にソートされます。

  • DESC: 降順 (数値の場合は高から低、文字列の場合は「Z」から「A」)。

NULLS FIRST | NULLS LAST

NULL を NULL 以外の値より先に順序付けするか、NULL 以外の値の後に順序付けするかを指定するオプション。デフォルトでは、NULL は昇順ではソートされて最後にランク付けされ、降順ではソートされて最初にランク付けされます。

frame_clause

集計関数では、ORDER BY を使用する場合、フレーム句は関数のウィンドウで行のセットをさらに絞り込みます。これにより、順序付けされた結果内の行セットを包含または除外できます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。

フレーム句はランキング関数には適用されません。また、アグリゲーション関数の OVER 句で ORDER BY 句が使用されていない場合、frame 句は必要ありません。ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。

ORDER BY 句が指定されていない場合、暗黙的なフレームはバインドされません (ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING と同じ)。

ROWS

この句は、現在の行からの物理オフセットを指定してウィンドウフレームを定義します。

この句は、現在のウィンドウの行、または現在の行の値を組み合わせるパーティションを指定します。また、現在の行の前後に配置される行の位置を指定する引数を使用します。すべてのウィンドウフレームの参照点は現在の行です。ウィンドウフレームがパーティションで次にスライドすると、各行は順に現在の行になります。

フレームは、次のように現在の行までと現在の行を含む行の簡易セットである場合があります。

{UNBOUNDED PRECEDING | offset PRECEDING | CURRENT ROW}

または、2 つの境界間の行のセットでもかまいません。

BETWEEN {UNBOUNDED PRECEDING | offset { PRECEDING | FOLLOWING } | CURRENT ROW} AND {UNBOUNDED FOLLOWING | offset { PRECEDING | FOLLOWING } | CURRENT ROW}

UNBOUNDED PRECEDING はウィンドウがパーティションの最初の行で開始することを示し、offset PRECEDING はウィンドウが現在の行の前のオフセット値と等しい行数で開始することを示します。デフォルトは UNBOUNDED PRECEDING です。

CURRENT ROW は、ウィンドウが現在の行で開始または終了することを示します。

UNBOUNDED FOLLOWING はウィンドウがパーティションの最後の行で終了することを示し、offset FOLLOWING はウィンドウが現在の行の後のオフセット値と等しい行数で終了することを示します。

offset は、現在の行の前後にある物理的な行数を識別します。この場合、offset は、正の数値に評価される定数である必要があります。たとえば、5 FOLLOWING は、現在の行の 5 行後にフレームを終了します。

BETWEEN が指定されていない場合、フレームは現在の行により暗黙的に区切られます。例えば、 ROWS 5 PRECEDING は次と等しい: ROWS BETWEEN 5 PRECEDING AND CURRENT ROW。 また、 ROWS UNBOUNDED FOLLOWING は次と等しい: ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING.

注記

開始境界が終了境界より大きいフレームを指定することはできません。たとえば、次のフレームは指定できません。

between 5 following and 5 preceding between current row and 2 preceding between 3 following and current row