Eenvoudiger met de aggregatiefunctie string_agg() (Postgres 9.0 of hoger):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
De 1 in GROUP BY 1 is een positionele referentie en een snelkoppeling voor GROUP BY movie in dit geval.
string_agg() verwacht gegevenstype text als invoer. Andere typen moeten expliciet worden gecast (actor::text ) - tenzij een impliciete cast naar text is gedefinieerd - wat het geval is voor alle andere tekentypes (varchar , character , "char" ), en enkele andere soorten.
Zoals isapir opmerkte, kun je een ORDER BY . toevoegen clausule in de geaggregeerde oproep om een gesorteerde lijst te krijgen - mocht u dat nodig hebben. Vind ik leuk:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Maar het is doorgaans sneller om rijen in een subquery te sorteren. Zie:
- Postgres SQL - Array maken in Select