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