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.