PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL GROUP_CONCAT() Équivalent

Certains SGBDR comme MySQL et MariaDB ont un GROUP_CONCAT() fonction qui vous permet de renvoyer une colonne de requête sous forme de liste délimitée (par exemple, une liste séparée par des virgules).

PostgreSQL a une fonction similaire appelée STRING_AGG() . Cette fonction fonctionne à peu près de la même manière que GROUP_CONCAT() fonctionne dans MySQL et MariaDB.

Exemple

Voici un exemple de base pour montrer comment le STRING_AGG() de PostgreSQL la fonction fonctionne :

SELECT STRING_AGG(genre, ',') FROM Genres;

Résultat :

Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk

Voici ce qui se passe lorsque nous effectuons simplement la requête sans le STRING_AGG() fonction :

SELECT genre FROM Genres;

Résultat :

+---------+
|  genre  |
+---------+
| Rock    |
| Jazz    |
| Country |
| Pop     |
| Blues   |
| Hip Hop |
| Rap     |
| Punk    |
+---------+
(8 rows)

Nous obtenons huit lignes, chacune avec une valeur distincte, au lieu d'une longue ligne séparée par des virgules de toutes les valeurs.

Si quoi que ce soit, le STRING_AGG() de PostgreSQL ressemble plus au GROUP_CONCAT() de MySQL que la fonction de MariaDB du même nom. Je dis cela parce que le GROUP_CONCAT() de MariaDB nous permet de fournir une LIMIT clause (à partir de MariaDB 10.3.3), directement depuis la fonction elle-même. MySQL GROUP_CONCAT() ne prend pas en charge la LIMIT clause, et la clause STRING_AGG() de PostgreSQL non plus fonction (du moins, pas au moment d'écrire ces lignes).

Une autre différence est que STRING_AGG() de PostgreSQL nécessite un deuxième argument (qui spécifie le délimiteur à utiliser). MySQL et MariaDB rendent cela facultatif avec leur GROUP_CONCAT() fonctions.

STRING_AGG() de Postgres accepte un ORDER BY clause, et une DISTINCT clause (tout comme MariaDB et MySQL GROUP_CONCAT() fonctions).

Voir STRING_AGG() Fonction dans PostgreSQL pour plus d'exemples.

Et au cas où vous seriez intéressé, SQL Server a également un STRING_AGG() fonction qui fonctionne à peu près de la même manière.