ウィンドウ関数 - Amazon Redshift

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

ウィンドウ関数

ウィンドウ関数を使用することで、ユーザーは分析業務クエリをより効率的に作成できます。ウィンドウ関数はパーティションまたは結果セットの「ウィンドウ」で演算し、ウィンドウのすべての行に値を返します。それに対して、ウィンドウ関数以外は結果セットのすべての行について計算を実行します。結果の行を集計するグループ関数とは異なり、テーブル式のすべての行が保持されます。

戻り値は、このウィンドウの行セットの値を使用して計算されます。ウィンドウは、テーブルの各行に対して、追加の属性を計算するために使用する行のセットを定義します。ウィンドウはウィンドウ仕様 (OVER 句) を使用して定義され、次の 3 つの主要な概念に基づいています。

  • ウィンドウのパーティション、列のグループを形成 (PARTITION 句)

  • ウィンドウの並び順、各パーティション内の行の順序またはシーケンスの定義 (ORDER BY 句)

  • ウィンドウのフレーム、各行に関連して定義され、行のセットをさらに制限 (ROWS 仕様)

ウィンドウ関数は、最後の ORDER BY 句を除いて、クエリで実行される最後の演算のセットです。すべての結合およびすべての WHERE、GROUP BY、および HAVING 句は、ウィンドウ関数が処理される前に完了されます。そのため、ウィンドウ関数は選択リストまたは ORDER BY 句のみに表示できます。異なるフレーム句を持つ単一のクエリ内で複数のウィンドウ関数を使用できます。CASE などの他のスカラー式でウィンドウ関数を使用することもできます。

Amazon Redshift は、集計とランク付けという 2 つのタイプのウィンドウ関数をサポートします。

サポートされる集計関数は次のとおりです。

  • AVG

  • COUNT

  • CUME_DIST

  • FIRST_VALUE

  • LAG

  • LAST_VALUE

  • LEAD

  • MAX

  • MEDIAN

  • MIN

  • NTH_VALUE

  • PERCENTILE_CONT

  • PERCENTILE_DISC

  • RATIO_TO_REPORT

  • STDDEV_POP

  • STDDEV_SAMP (STDDEV のシノニム)

  • SUM

  • VAR_POP

  • VAR_SAMP (VARIANCE のシノニム)

サポートされるランク付け関数は次のとおりです。

  • DENSE_RANK

  • NTILE

  • PERCENT_RANK

  • RANK

  • ROW_NUMBER

ウィンドウ関数の概要の例

以下は、ウィンドウ関数の使用方法を示す概要例です。また、関数の説明を含む特定のコード例を見つけることができます。

一部のウィンドウ関数の例では、次に示すように 11 行を含む WINSALES というテーブルを使用します。

SALESID DATEID SELLERID BUYERID QTY QTY_SHIPPED
30001 8/2/2003 3 B 10 10
10001 12/24/2003 1 C 10 10
10005 12/24/2003 1 A 30
40001 1/9/2004 4 A 40
10006 1/18/2004 1 C 10
20001 2/12/2004 2 B 20 20
40005 2/12/2004 4 A 10 10
20002 2/16/2004 2 C 20 20
30003 4/18/2004 3 B 15
30004 4/18/2004 3 B 20
30007 9/7/2004 3 C 30

次のスクリプトは、WINSALES テーブルの例を作成し、値を入力します。

create table winsales( salesid int, dateid date, sellerid int, buyerid char(10), qty int, qty_shipped int); insert into winsales values (30001, '8/2/2003', 3, 'b', 10, 10), (10001, '12/24/2003', 1, 'c', 10, 10), (10005, '12/24/2003', 1, 'a', 30, null), (40001, '1/9/2004', 4, 'a', 40, null), (10006, '1/18/2004', 1, 'c', 10, null), (20001, '2/12/2004', 2, 'b', 20, 20), (40005, '2/12/2004', 4, 'a', 10, 10), (20002, '2/16/2004', 2, 'c', 20, 20), (30003, '4/18/2004', 3, 'b', 15, null), (30004, '4/18/2004', 3, 'b', 20, null), (30007, '9/7/2004', 3, 'c', 30, null);