sql >> Database >  >> RDS >> Oracle

LISTAGG() Functie in Oracle

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.


  1. Is er een alternatief voor TOP in MySQL?

  2. Mijn Select SUM-query retourneert null. Het zou 0 . moeten retourneren

  3. kan geen automatisch oplopende primaire sleutel maken met flask-sqlalchemy

  4. SQLite-databaselek gevonden