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

Équivalent Oracle GROUP_CONCAT()

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.