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.