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.