Oracle
 sql >> Baza danych >  >> RDS >> Oracle

LISTAGG() Funkcja w Oracle

W Oracle LISTAGG() funkcja umożliwia nam łączenie danych z wielu wierszy w jeden wiersz.

Mamy możliwość określenia separatora (np. przecinka). Możemy również uporządkować wyniki generowane przez LISTAGG() funkcja i nie tylko.

Składnia

Składnia wygląda tak:

LISTAGG( [ ALL | DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
  [ WITHIN GROUP order_by_clause ] [OVER query_partition_clause]

Gdzie listagg_overflow_clause jest:

{ ON OVERFLOW ERROR }
|
{ ON OVERFLOW TRUNCATE [ 'truncation-indicator' ] [ { WITH | WITHOUT } COUNT ] }

Przykład

Załóżmy, że uruchamiamy następujące zapytanie:

SELECT region_name
FROM regions;

Wynik:

              REGION_NAME 
_________________________ 
Europe                    
Americas                  
Asia                      
Middle East and Africa    

Możemy użyć LISTAGG() aby przekonwertować te wyniki na listę oddzieloną przecinkami:

SELECT LISTAGG(region_name, ', ')
FROM regions;

Wynik:

                         LISTAGG(REGION_NAME,',') 
_________________________________________________ 
Europe, Americas, Asia, Middle East and Africa    

Zmień separator

Drugi argument możemy zmienić na inny separator:

SELECT LISTAGG(region_name, '; ') 
FROM regions;

Wynik:

Europe; Americas; Asia; Middle East and Africa 

Pomiń separator

Możemy pominąć drugi argument, aby każda wartość była łączona bez separatora:

SELECT LISTAGG(region_name) 
FROM regions;

Wynik:

EuropeAmericasAsiaMiddle East and Africa

Uporządkuj wyniki

Możemy użyć WITHIN GROUP (ORDER BY...) klauzula porządkująca wyjście LISTAGG() funkcja:

SELECT LISTAGG(region_name, ',') WITHIN GROUP (ORDER BY region_name ASC) 
FROM regions;

Wynik:

Americas,Asia,Europe,Middle East and Africa

Użycie w zgrupowanych zapytaniach

Możemy użyć LISTAGG() funkcjonować w zgrupowanym zapytaniu, aby dostarczyć takie wyniki:

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;

Wynik:

   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           

Zwróć tylko odrębne wartości

Możemy użyć DISTINCT klauzula zwracająca tylko unikalne wartości:

SELECT LISTAGG(DISTINCT region_id, ', ') 
FROM regions;

Wynik:

1, 2, 3, 4

Zapoznaj się z dokumentacją Oracle, aby uzyskać więcej informacji na temat tego, co możesz zrobić za pomocą tej funkcji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Określanie lokalizacji odpowiedniego pliku tnsnames.ora

  2. Uzyskujesz lokalizację i nazwę pliku tabeli zewnętrznej?

  3. Jak wyświetlić komentarze kolumny z operacją desc

  4. Błąd:PLS-00428:w tej instrukcji oczekiwana jest klauzula into

  5. Przykład transakcji autonomicznej Oracle