web-dev-qa-db-ja.com

redshiftでのarray_agg()またはstring_agg()の代替

このクエリを使用して、集計結果を取得しています。

select _bs, string_agg(_wbns, ',') from bag group by 1;

このエラーが発生します:

クエリの実行中にエラーが発生しました:関数string_agg(文字が変化します、 "不明")が存在しませんヒント:指定された名前と引数のタイプに一致する関数がありません。明示的な型キャストを追加する必要がある場合があります。

Array_agg()も試しましたが、同じエラーが発生しました。

結果を集計するために使用できる他のオプションを理解するのを手伝ってください。

4
Bhawan

リシフトにはlistaggを使用する必要があります

クエリ内のグループごとに、LISTAGG集計関数は、ORDER BY式に従ってそのグループの行を並べ替えてから、値を1つの文字列に連結します。

LISTAGGは、計算ノードのみの関数です。クエリがユーザー定義テーブルまたはAmazonRedshiftシステムテーブルを参照していない場合、関数はエラーを返します。

クエリは次のようになります

select _bs, 
listagg(_wbns,',')
within group (order by _wbns) as val
from bag
group by _bs
order by _bs;

理解を深めるために Listagg

5

Listagg関数を使用します。

select _bs, 
listagg(_wbns,',')
within group (order by _bs) as val
from bag
group by _bs
1
Fahmi

Redshiftには listagg 関数があり、代わりに使用できます。

SELECT _bs, LISTAGG(_wbns, ',') FROM bag GROUP BY _bs;
1
Mureinik