In Oracle, de LISTAGG()
functie stelt ons in staat om gegevens uit meerdere rijen te combineren in een enkele rij.
We hebben de mogelijkheid om een scheidingsteken (zoals een komma) op te geven. We kunnen ook de resultaten bestellen die worden geproduceerd door de LISTAGG()
functie en meer.
Syntaxis
De syntaxis gaat als volgt:
LISTAGG( [ ALL | DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
[ WITHIN GROUP order_by_clause ] [OVER query_partition_clause]
Waar listagg_overflow_clause
is:
{ ON OVERFLOW ERROR }
|
{ ON OVERFLOW TRUNCATE [ 'truncation-indicator' ] [ { WITH | WITHOUT } COUNT ] }
Voorbeeld
Stel dat we de volgende query uitvoeren:
SELECT region_name
FROM regions;
Resultaat:
REGION_NAME _________________________ Europe Americas Asia Middle East and Africa
We kunnen LISTAGG()
. gebruiken om die resultaten om te zetten in een door komma's gescheiden lijst:
SELECT LISTAGG(region_name, ', ')
FROM regions;
Resultaat:
LISTAGG(REGION_NAME,',') _________________________________________________ Europe, Americas, Asia, Middle East and Africa
Verander het scheidingsteken
We kunnen het tweede argument veranderen in een ander scheidingsteken:
SELECT LISTAGG(region_name, '; ')
FROM regions;
Resultaat:
Europe; Americas; Asia; Middle East and Africa
Laat het scheidingsteken weg
We kunnen het tweede argument weglaten om elke waarde aaneengeschakeld te hebben zonder scheidingsteken:
SELECT LISTAGG(region_name)
FROM regions;
Resultaat:
EuropeAmericasAsiaMiddle East and Africa
Bestel de resultaten
We kunnen de WITHIN GROUP (ORDER BY...)
. gebruiken clausule om de uitvoer van de LISTAGG()
. te bestellen functie:
SELECT LISTAGG(region_name, ',') WITHIN GROUP (ORDER BY region_name ASC)
FROM regions;
Resultaat:
Americas,Asia,Europe,Middle East and Africa
Gebruik in gegroepeerde zoekopdrachten
We kunnen de LISTAGG()
. gebruiken functie binnen een gegroepeerde zoekopdracht om de volgende resultaten te leveren:
SELECT
region_id,
LISTAGG(country_id, ', ') WITHIN GROUP (ORDER BY country_id ASC) AS "Countries"
FROM countries
GROUP BY region_id
ORDER BY region_id;
Resultaat:
REGION_ID Countries ____________ _________________________________ 1 BE, CH, DE, DK, FR, IT, NL, UK 2 AR, BR, CA, MX, US 3 AU, CN, HK, IN, JP, SG 4 EG, IL, KW, NG, ZM, ZW
Alleen verschillende waarden retourneren
We kunnen de DISTINCT
. gebruiken clausule om alleen unieke waarden te retourneren:
SELECT LISTAGG(DISTINCT region_id, ', ')
FROM regions;
Resultaat:
1, 2, 3, 4
Raadpleeg de documentatie van Oracle voor meer details over wat u met deze functie kunt doen.