Enklare med aggregatfunktionen string_agg() (Postgres 9.0 eller senare):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
1 i GROUP BY 1 är en positionsreferens och en genväg för GROUP BY movie i det här fallet.
string_agg() förväntar sig datatypen text som input. Andra typer måste castas explicit (actor::text ) - om inte en implicit cast till text är definierad - vilket är fallet för alla andra teckentyper (varchar , character , "char" ), och några andra typer.
Som isapir kommenterade kan du lägga till en ORDER BY klausul i det samlade anropet för att få en sorterad lista - om du skulle behöva det. Gilla:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Men det är vanligtvis snabbare att sortera rader i en underfråga. Se:
- Postgres SQL - Skapa array i Select