Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mendapatkan Nilai Berbeza Menggunakan Fungsi LISTAGG Oracle?
Oracle LISTAGG: Mengekstrak Nilai Unik
Fungsi Oracle LISTAGG, walaupun berkuasa, boleh memberikan cabaran apabila menyasarkan nilai unik dalam lajur. Artikel ini menggariskan penyelesaian yang cekap tanpa memerlukan fungsi atau prosedur tambahan.
Oracle 19c dan Ke Atas:
Oracle 19c dan versi yang lebih baru menawarkan pendekatan yang diperkemas:
<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM the_table;</code>
Ini secara langsung mengagregatkan nilai yang berbeza, memberikan kaedah yang ringkas dan berkesan.
Oracle 18c dan Terdahulu:
Untuk versi Oracle yang lebih lama, subkueri diperlukan:
<code class="language-sql">SELECT LISTAGG(the_column, ',') WITHIN GROUP (ORDER BY the_column) FROM ( SELECT DISTINCT the_column FROM the_table ) t;</code>
Ini mencipta jadual sementara (t
) yang mengandungi hanya nilai yang berbeza sebelum LISTAGG digunakan.
Mengendalikan Berbilang Lajur:
Untuk menyertakan lajur tambahan bersama nilai LISTAGG yang unik, gunakan pertanyaan ini:
<code class="language-sql">SELECT col1, LISTAGG(col2, ',') WITHIN GROUP (ORDER BY col2) FROM ( SELECT col1, col2, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col1) AS rn FROM foo ORDER BY col1, col2 ) WHERE rn = 1 GROUP BY col1;</code>
Ini memastikan setiap nilai col2
unik digandingkan dengan betul dengan nilai col1
yang sepadan, memberikan set hasil yang lebih lengkap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai Berbeza Menggunakan Fungsi LISTAGG Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!