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

Comment renvoyer les résultats d'une requête sous forme de liste séparée par des virgules dans PostgreSQL

Dans Postgres, nous pouvons utiliser le STRING_AGG() fonction pour transformer nos résultats de requête en une liste séparée par des virgules.

Au lieu que chaque valeur soit sortie dans une ligne séparée (comme pour toute requête régulière), les valeurs sont sorties sur une seule ligne, séparées par une virgule (ou un autre délimiteur de notre choix).

Exemple

Imaginons que nous lancions la requête suivante :

SELECT * 
FROM Genres;

Résultat :

+---------+---------+
| genreid |  genre  |
+---------+---------+
|       1 | Rock    |
|       2 | Jazz    |
|       3 | Country |
|       4 | Pop     |
|       5 | Blues   |
|       6 | Hip Hop |
|       7 | Rap     |
|       8 | Punk    |
+---------+---------+
(8 rows)

Nous pouvons exécuter la requête suivante pour afficher le genre colonne sous forme de liste séparée par des virgules :

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

Résultat :

+-----------------------------------------------------+
|                     string_agg                      |
+-----------------------------------------------------+
| Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk |
+-----------------------------------------------------+
(1 row)

Nous pouvons même inclure le GenreId colonne dans notre liste si nous voulons :

SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC) 
FROM Genres;

Résultat :

1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk

Ici, j'ai aussi utilisé le ORDER BY clause dans STRING_AGG() fonction afin de trier les résultats par GenreId par ordre croissant.

Nous pouvons également faire des choses comme, supprimer les doublons (avec le DISTINCT clause), utilisez un séparateur différent et utilisez la fonction dans une requête groupée.

Voir STRING_AGG() Fonction dans PostgreSQL pour des exemples.