PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL GROUP_CONCAT()-Äquivalent

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.