Enklere med aggregatfunktionen string_agg()
(Postgres 9.0 eller nyere):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1
i GROUP BY 1
er en positionsreference og en genvej til GROUP BY movie
i dette tilfælde.
string_agg()
forventer datatypen text
som input. Andre typer skal castes eksplicit (actor::text
) - medmindre en implicit cast til text
er defineret - hvilket er tilfældet for alle andre tegntyper (varchar
, character
, "char"
), og nogle andre typer.
Som isapir kommenterede, kan du tilføje en ORDER BY
klausul i det samlede opkald for at få en sorteret liste - hvis du skulle få brug for det. Ligesom:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1;
Men det er typisk hurtigere at sortere rækker i en underforespørgsel. Se:
- Postgres SQL - Opret array i Select