Oracle LISTAGG: Menjana Rentetan dengan Nilai Unik
Fungsi LISTAGG
Oracle sangat berharga untuk menggabungkan nilai lajur ke dalam satu rentetan. Walau bagaimanapun, untuk mendapatkan nilai berbeza sahaja dalam rentetan agregat memerlukan pendekatan khusus. Panduan ini menunjukkan kaedah yang cekap, mengelakkan keperluan untuk fungsi tersuai atau prosedur tersimpan.
Oracle 19c dan Kemudian: Memanfaatkan DISTINCT Secara Terus
Untuk Oracle 19c dan versi seterusnya, kata kunci DISTINCT
boleh disepadukan dengan lancar dalam fungsi LISTAGG
itu sendiri:
<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM the_table;</code>
Oracle 18c dan Terdahulu: Menggunakan Subkueri
Dalam versi Oracle yang lebih lama (18c dan lebih awal), subkueri diperlukan untuk menapis nilai unik sebelum pengagregatan:
<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM ( SELECT DISTINCT the_column FROM the_table ) t;</code>
Menggabungkan Berbilang Lajur
Pertanyaan berikut memanjangkan fungsi untuk memasukkan berbilang lajur, menunjukkan kaedah yang mantap untuk senario yang lebih kompleks:
<code class="language-sql">SELECT DISTINCT col1, listagg(col2, ',') OVER (PARTITION BY col1 ORDER BY col2) AS col2_list FROM table_name WHERE RN = 1 GROUP BY col1 ORDER BY col1;</code>
Kesimpulannya, menggunakan sama ada DISTINCT
kata kunci (19c dan ke atas) atau subkueri (18c dan ke bawah), anda boleh menjana hasil LISTAGG
dengan berkesan yang mengandungi hanya nilai unik. Teknik ini menawarkan fleksibiliti merentas versi Oracle yang berbeza dan memudahkan kemasukan berbilang lajur apabila diperlukan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Nilai Berbeza Apabila Menggunakan Fungsi LISTAGG Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!