Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memastikan Nilai Berbeza Apabila Menggunakan Fungsi LISTAGG Oracle?

Bagaimanakah Saya Boleh Memastikan Nilai Berbeza Apabila Menggunakan Fungsi LISTAGG Oracle?

Mary-Kate Olsen
Lepaskan: 2025-01-19 18:26:09
asal
120 orang telah melayarinya

How Can I Ensure Distinct Values When Using Oracle's LISTAGG Function?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan