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