Più semplice con la funzione di aggregazione string_agg()
(Postgres 9.0 o successivo):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
Il 1
in GROUP BY 1
è un riferimento posizionale e una scorciatoia per GROUP BY movie
in questo caso.
string_agg()
prevede il tipo di dati text
come input. Altri tipi devono essere espressi in modo esplicito (actor::text
) - a meno che un cast implicito a text
è definito, come nel caso di tutti gli altri tipi di carattere (varchar
, character
, "char"
), e alcuni altri tipi.
Come ha commentato isapir, puoi aggiungere un ORDER BY
clausola nella chiamata aggregata per ottenere un elenco ordinato, se necessario. Come:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;
Ma in genere è più veloce ordinare le righe in una sottoquery. Vedi:
- Postgres SQL - Crea array in Seleziona