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.