Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

LISTAGG() Fungsi di Oracle

Di Oracle, LISTAGG() fungsi memungkinkan kita untuk menggabungkan data dari beberapa baris ke dalam satu baris.

Kami memiliki opsi untuk menentukan pemisah (seperti koma). Kami juga dapat memesan hasil yang dihasilkan oleh LISTAGG() fungsi, dan banyak lagi.

Sintaks

Sintaksnya seperti ini:

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

Dimana listagg_overflow_clause adalah:

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

Contoh

Misalkan kita menjalankan kueri berikut:

SELECT region_name
FROM regions;

Hasil:

              REGION_NAME 
_________________________ 
Europe                    
Americas                  
Asia                      
Middle East and Africa    

Kita bisa menggunakan LISTAGG() untuk mengonversi hasil tersebut menjadi daftar yang dipisahkan koma:

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

Hasil:

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

Ubah Pemisah

Kita dapat mengubah argumen kedua ke pemisah yang berbeda:

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

Hasil:

Europe; Americas; Asia; Middle East and Africa 

Abaikan Pemisah

Kita dapat menghilangkan argumen kedua agar setiap nilai digabungkan tanpa pemisah:

SELECT LISTAGG(region_name) 
FROM regions;

Hasil:

EuropeAmericasAsiaMiddle East and Africa

Pesan Hasil

Kita dapat menggunakan WITHIN GROUP (ORDER BY...) klausa untuk memesan output dari LISTAGG() fungsi:

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

Hasil:

Americas,Asia,Europe,Middle East and Africa

Penggunaan dalam Kueri yang Dikelompokkan

Kita dapat menggunakan LISTAGG() fungsi dalam kueri yang dikelompokkan untuk memberikan hasil seperti ini:

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;

Hasil:

   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           

Hanya Mengembalikan Nilai Berbeda

Kita dapat menggunakan DISTINCT klausa untuk mengembalikan hanya nilai unik:

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

Hasil:

1, 2, 3, 4

Lihat dokumentasi Oracle untuk detail lebih lanjut tentang apa yang dapat Anda lakukan dengan fungsi ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe Data Oracle

  2. Pengantar Penanganan Pengecualian PL/SQL Di Database Oracle

  3. Oracle:Prosedur tersimpan Java mengirim Pesan JMS

  4. Membuat Layar Login Kustom Di Oracle Forms 10g

  5. Bagaimana cara mendapatkan input dari pengguna saat runtime