メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

LISTAGG 関数

クエリの各グループについて、LISTAGG 集計関数は、ORDER BY 式に従って各グループの行をソートしてから、それらの値を 1 つの文字列に連結します。

構文

Copy
LISTAGG(aggregate_expression [, 'delimiter' ] ) [ WITHIN GROUP (ORDER BY order_list) ]

引数

aggregate_expression

集計する値を返す任意の有効な式 (列名など)。NULL 値および空の文字列は無視されます。LISTAGG は DISTINCT 式をサポートしていません。

区切り記号

オプション。連結された値を区切る文字列定数。デフォルトは NULL です。

WITHIN GROUP (ORDER BY order_list)

オプション。集計値のソート順を指定します。

戻り値

VARCHAR(MAX)。結果セットが最大 VARCHAR サイズ (64K - 1、または 65535) より大きい場合、LISTAGG は以下のエラーを返します。

Copy
Invalid operation: Result size exceeds LISTAGG limit

使用に関する注意事項

WITHIN GROUP 句を使用する複数の LISTAGG 関数が 1 つのステートメントに含まれる場合、各 WITHIN GROUP 句で ORDER BY 値を使用する必要があります。

たとえば、以下のステートメントはエラーを返します。

Copy
select listagg(sellerid) within group (order by dateid) as sellers, listagg(dateid) within group (order by sellerid) as dates from winsales;

以下のステートメントは正常に実行されます。

Copy
select listagg(sellerid) within group (order by dateid) as sellers, listagg(dateid) within group (order by dateid) as dates from winsales; select listagg(sellerid) within group (order by dateid) as sellers, listagg(dateid) as dates from winsales;

以下の例は、販売者 ID を集計し、販売者 ID 順で返します。

Copy
select listagg(sellerid) within group (order by sellerid) from winsales; listagg ------------ 11122333344

以下の例は、販売者 ID を集計し、日付順で返します。

Copy
select listagg(sellerid) within group (order by dateid) from winsales; listagg ------------- 31141242333

以下の例は、購入者 B について販売日付のパイプ区切りリストを返します。

Copy
select listagg(dateid,'|') within group (order by sellerid desc,salesid asc) from winsales where buyerid = 'b'; listagg --------------------------------------- 2003-08-02|2004-04-18|2004-04-18|2004-02-12

以下の例は、各購入者 ID について販売 ID のカンマ区切りリストを返します。

Copy
select buyerid, listagg(salesid,',') within group (order by salesid) as sales_id from winsales group by buyerid order by buyerid; buyerid | sales_id -----------+------------------------ a |10005,40001,40005 b |20001,30001,30004,30003 c |10001,20002,30007,10006