Einige RDBMS wie MySQL und MariaDB haben einen GROUP_CONCAT()
Funktion, mit der Sie eine Abfragespalte als eine durch Trennzeichen getrennte Liste zurückgeben können (z. B. eine durch Kommas getrennte Liste).
PostgreSQL hat eine ähnliche Funktion namens STRING_AGG()
. Diese Funktion funktioniert ziemlich ähnlich wie GROUP_CONCAT()
funktioniert in MySQL und MariaDB.
Beispiel
Hier ist ein einfaches Beispiel, um zu demonstrieren, wie PostgreSQLs STRING_AGG()
Funktion funktioniert:
SELECT STRING_AGG(genre, ',') FROM Genres;
Ergebnis:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Folgendes passiert, wenn wir die Abfrage einfach ohne STRING_AGG()
ausführen Funktion:
SELECT genre FROM Genres;
Ergebnis:
+---------+ | genre | +---------+ | Rock | | Jazz | | Country | | Pop | | Blues | | Hip Hop | | Rap | | Punk | +---------+ (8 rows)
Wir erhalten acht Zeilen, jede mit einem separaten Wert, anstelle einer langen, durch Kommas getrennten Zeile aller Werte.
Wenn überhaupt, PostgreSQLs STRING_AGG()
ist eher wie GROUP_CONCAT()
von MySQL als die gleichnamige Funktion von MariaDB. Ich sage das, weil MariaDBs GROUP_CONCAT()
ermöglicht es uns, ein LIMIT
bereitzustellen -Klausel (ab MariaDB 10.3.3) direkt in der Funktion selbst. MySQL GROUP_CONCAT()
unterstützt das LIMIT
nicht -Klausel, und STRING_AGG()
von PostgreSQL auch nicht Funktion (zumindest zum Zeitpunkt des Schreibens nicht).
Ein weiterer Unterschied besteht darin, dass PostgreSQLs STRING_AGG()
erfordert ein zweites Argument (das das zu verwendende Trennzeichen angibt). Sowohl MySQL als auch MariaDB machen dies mit ihrem GROUP_CONCAT()
optional Funktionen.
STRING_AGG()
von Postgres akzeptiert einen ORDER BY
-Klausel und ein DISTINCT
-Klausel (ebenso wie GROUP_CONCAT()
von MariaDB und MySQL Funktionen).
Siehe STRING_AGG()
Funktion in PostgreSQL für weitere Beispiele.
Und falls es Sie interessiert, SQL Server hat auch ein STRING_AGG()
Funktion, die ziemlich ähnlich funktioniert.