Vissa RDBMS har en GROUP_CONCAT()
funktion som låter dig returnera en frågekolumn som en avgränsad lista (till exempel en kommaseparerad lista). MySQL och MariaDB är två som har en sådan funktion.
PostgreSQL och SQL Server har liknande funktioner som kallas STRING_AGG()
.
Oracle, å andra sidan, har LISTAGG()
funktion som gör ungefär samma sak (och kanske mer).
Så du kan säga att LISTAGG()
är Oracles GROUP_CONCAT()
motsvarande.
Exempel
Här är ett grundläggande exempel för att visa hur Oracles LISTAGG()
funktionen fungerar:
SELECT LISTAGG(region_name, ',')
FROM regions;
Resultat:
LISTAGG(REGION_NAME,',') ______________________________________________ Europe,Americas,Asia,Middle East and Africa
I det här fallet specificerade jag att avgränsaren är ett kommatecken.
Här är vad som händer när vi bara gör frågan utan LISTAGG()
funktion:
SELECT region_name
FROM regions;
Resultat:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
Vi får fyra rader, var och en med ett separat värde, istället för en kommaseparerad rad som innehåller alla värden.
LISTAGG()
Funktionen gör det också möjligt för oss att beställa resultaten, endast returnera unika värden (via DISTINCT
klausul) och mer.
Se LISTAGG()
Funktion i Oracle för fler exempel.