Einfacher mit der Aggregatfunktion string_agg() (Postgres 9.0 oder höher):
SELECT movie, string_agg(actor, ', ') AS actor_list
FROM tbl
GROUP BY 1;
Die 1 in GROUP BY 1 ist eine Positionsreferenz und eine Abkürzung für GROUP BY movie in diesem Fall.
string_agg() erwartet den Datentyp text als Eingang. Andere Typen müssen explizit umgewandelt werden (actor::text ) - es sei denn eine implizite Umwandlung in text definiert ist - was bei allen anderen Zeichentypen der Fall ist (varchar , character , "char" ) und einige andere Arten.
Wie isapir kommentierte, können Sie einen ORDER BY hinzufügen -Klausel im Aggregataufruf, um eine sortierte Liste zu erhalten - falls Sie das brauchen. Wie:
SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM tbl
GROUP BY 1; Normalerweise ist es jedoch schneller, Zeilen in einer Unterabfrage zu sortieren. Siehe:
- Postgres SQL - Array in Select erstellen