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