Plus simple avec la fonction d'agrégation string_agg()
(Postgres 9.0 ou plus récent) :
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
El 1
en GROUP BY 1
est une référence positionnelle et un raccourci pour GROUP BY movie
dans ce cas.
string_agg()
attend le type de données text
comme entrée. Les autres types doivent être convertis explicitement ( actor::text
) - sauf si un transfert implicite vers text
est définie - ce qui est le cas pour tous les autres types de chaînes ( varchar
, character
, name
...) et d'autres types.
Comme isapir a commenté vous pouvez ajouter un ORDER BY
dans l'appel à l'agrégat pour obtenir une liste triée - si vous en avez besoin. Comme :
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;
Mais il est généralement plus rapide de trier les lignes dans une sous-requête. Voir :