集計関数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でアレイを作成