SUM ウィンドウ関数 - Amazon Redshift

SUM ウィンドウ関数

SUM ウィンドウ関数は入力列または式の値の合計を返します。SUM 関数は数値に対してはたらき、NULL 値を無視します。

構文

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

引数

expression

関数の対象となる列または式。

ALL

引数 ALL を指定すると、この関数は式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER

集計関数に使用するウィンドウ句を指定します。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY expr_list

1 つ以上の式で SUM 関数のウィンドウを定義します。

ORDER BY order_list

各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

frame_clause

ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「ウィンドウ関数の構文の概要」を参照してください。

データ型

SUM 関数でサポートされる引数の型は、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、および DOUBLE PRECISION です。

SUM 関数でサポートされる戻り値の型は次のとおりです。

  • SMALLINT または INTEGER 引数の場合は BIGINT

  • BIGINT 引数の場合は NUMERIC

  • 浮動小数点の引数の場合は DOUBLE PRECISION

次の例では、日付および販売 ID によって順序付けされた販売数量の累積 (中間) 合計を作成します。

select salesid, dateid, sellerid, qty, sum(qty) over (order by dateid, salesid rows unbounded preceding) as sum from winsales order by 2,1; salesid | dateid | sellerid | qty | sum ---------+------------+----------+-----+----- 30001 | 2003-08-02 | 3 | 10 | 10 10001 | 2003-12-24 | 1 | 10 | 20 10005 | 2003-12-24 | 1 | 30 | 50 40001 | 2004-01-09 | 4 | 40 | 90 10006 | 2004-01-18 | 1 | 10 | 100 20001 | 2004-02-12 | 2 | 20 | 120 40005 | 2004-02-12 | 4 | 10 | 130 20002 | 2004-02-16 | 2 | 20 | 150 30003 | 2004-04-18 | 3 | 15 | 165 30004 | 2004-04-18 | 3 | 20 | 185 30007 | 2004-09-07 | 3 | 30 | 215 (11 rows)

WINSALES テーブルの説明については、「ウィンドウ関数例のサンプルテーブル」を参照してください。

次の例では、日付による販売数量の累積 (中間) 合計を作成し、結果を販売者 ID でパーティション分割して、パーティション内の日付と販売 ID によって結果を順序付けします。

select salesid, dateid, sellerid, qty, sum(qty) over (partition by sellerid order by dateid, salesid rows unbounded preceding) as sum from winsales order by 2,1; salesid | dateid | sellerid | qty | sum ---------+------------+----------+-----+----- 30001 | 2003-08-02 | 3 | 10 | 10 10001 | 2003-12-24 | 1 | 10 | 10 10005 | 2003-12-24 | 1 | 30 | 40 40001 | 2004-01-09 | 4 | 40 | 40 10006 | 2004-01-18 | 1 | 10 | 50 20001 | 2004-02-12 | 2 | 20 | 20 40005 | 2004-02-12 | 4 | 10 | 50 20002 | 2004-02-16 | 2 | 20 | 40 30003 | 2004-04-18 | 3 | 15 | 25 30004 | 2004-04-18 | 3 | 20 | 45 30007 | 2004-09-07 | 3 | 30 | 75 (11 rows)

次の例では、SELLERID および SALESID 列によって順序付けられた結果セットのすべての行に番号をつけます。

select salesid, sellerid, qty, sum(1) over (order by sellerid, salesid rows unbounded preceding) as rownum from winsales order by 2,1; salesid | sellerid | qty | rownum --------+----------+------+-------- 10001 | 1 | 10 | 1 10005 | 1 | 30 | 2 10006 | 1 | 10 | 3 20001 | 2 | 20 | 4 20002 | 2 | 20 | 5 30001 | 3 | 10 | 6 30003 | 3 | 15 | 7 30004 | 3 | 20 | 8 30007 | 3 | 30 | 9 40001 | 4 | 40 | 10 40005 | 4 | 10 | 11 (11 rows)

WINSALES テーブルの説明については、「ウィンドウ関数例のサンプルテーブル」を参照してください。

次の例では、結果セットの行すべてに番号をつけ、SELLERID ごとに結果をパーティション化し、パーティション内の SELLERID および SALESID 列によって結果を順序付けます。

select salesid, sellerid, qty, sum(1) over (partition by sellerid order by sellerid, salesid rows unbounded preceding) as rownum from winsales order by 2,1; salesid | sellerid | qty | rownum ---------+----------+-----+-------- 10001 | 1 | 10 | 1 10005 | 1 | 30 | 2 10006 | 1 | 10 | 3 20001 | 2 | 20 | 1 20002 | 2 | 20 | 2 30001 | 3 | 10 | 1 30003 | 3 | 15 | 2 30004 | 3 | 20 | 3 30007 | 3 | 30 | 4 40001 | 4 | 40 | 1 40005 | 4 | 10 | 2 (11 rows)