集計関数string_agg()
を使用すると簡単になります (Postgres 9.0以降):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1
GROUP BY 1
で GROUP BY movie
の位置参照およびショートカットです。 この場合。
string_agg()
データ型text
が必要です 入力として。他のタイプは明示的にキャストする必要があります(actor::text
)-でない限り text
への暗黙のキャスト 定義されています-これは他のすべての文字タイプ(varchar
の場合)です。 、character
、"char"
)、および他のいくつかのタイプ。
isapirがコメントしたように、ORDER BY
を追加できます ソートされたリストを取得するための集約呼び出しの句-必要な場合。いいね:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;
ただし、通常、サブクエリで行を並べ替える方が高速です。参照:
- PostgresSQL-Selectでアレイを作成