Certains SGBDR 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). MySQL et MariaDB sont deux qui ont une telle fonction.
PostgreSQL et SQL Server ont des fonctions similaires appelées STRING_AGG()
.
Oracle, d'autre part, a le LISTAGG()
fonction qui fait à peu près la même chose (et peut-être plus).
Donc vous pourriez dire que LISTAGG()
est le GROUP_CONCAT()
d'Oracle équivalent.
Exemple
Voici un exemple de base pour démontrer comment le LISTAGG()
d'Oracle la fonction fonctionne :
SELECT LISTAGG(region_name, ',')
FROM regions;
Résultat :
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
Dans ce cas, j'ai précisé que le séparateur est une virgule.
Voici ce qui se passe lorsque nous faisons juste la requête sans le LISTAGG()
fonction :
SELECT region_name
FROM regions;
Résultat :
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Nous obtenons quatre lignes, chacune avec une valeur distincte, au lieu d'une ligne séparée par des virgules qui contient toutes les valeurs.
Le LISTAGG()
permet aussi d'ordonner les résultats, de ne retourner que des valeurs uniques (via le DISTINCT
clause), et plus encore.
Voir LISTAGG()
Fonction dans Oracle pour plus d'exemples.