Sommige RDBMS'en hebben een GROUP_CONCAT()
functie waarmee u een querykolom kunt retourneren als een lijst met scheidingstekens (bijvoorbeeld een door komma's gescheiden lijst). MySQL en MariaDB zijn twee die zo'n functie hebben.
PostgreSQL en SQL Server hebben vergelijkbare functies genaamd STRING_AGG()
.
Oracle daarentegen heeft de LISTAGG()
functie die vrijwel hetzelfde doet (en misschien meer).
Je zou dus kunnen zeggen dat LISTAGG()
is GROUP_CONCAT()
van Oracle gelijkwaardig.
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren hoe Oracle's LISTAGG()
functie werkt:
SELECT LISTAGG(region_name, ',')
FROM regions;
Resultaat:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
In dit geval heb ik aangegeven dat het scheidingsteken een komma is.
Dit is wat er gebeurt als we de query gewoon uitvoeren zonder de LISTAGG()
functie:
SELECT region_name
FROM regions;
Resultaat:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
We krijgen vier rijen, elk met een aparte waarde, in plaats van één door komma's gescheiden rij die alle waarden bevat.
De LISTAGG()
functie stelt ons ook in staat om de resultaten te ordenen, alleen unieke waarden te retourneren (via de DISTINCT
clausule), en meer.
Zie LISTAGG()
Functie in Oracle voor meer voorbeelden.