PostgerSQL ARRAY_AGG の と Oracle の LISTAGG

PostgreSQL には 行を 配列に変える ARRAY_AGG という関数があります。 これと配列を文字列に変える ARRAY_TO_STRING を組み合わせることで 行をカンマ区切りなどの文字列にすることができます。

例えば こんなテーブルに対して...

db=# SELECT id, name FROM fruit;

 id |  name
----+--------
  1 | りんご
  2 | みかん
  3 | ぶどう

次のような結果を得ることができます。

db=# SELECT ARRAY_TO_STRING(ARRAY_AGG(name order by id), ',') AS names FROM fruit;

        names
----------------------
 りんご,みかん,ぶどう

これを Oracle でなんとかできなかと思っていたんですが Oracleでも11g R2 から LISTAGG という関数が追加されていました。

SQL> SELECT LISTAGG(name, ',') WITHIN GROUP (order by id) AS names FROM fruit;

        names
----------------------
 りんご,みかん,ぶどう

LISTAGG 関数は ARRAY_AGG + ARRAY_TO_STRING のような動きをします。

Google サイト内検索

Amazonアソシエイト