Menggunakan fungsi LISTAGG dalam Oracle untuk mendapatkan semula nilai unik
Fungsi LISTAGG Oracle boleh menyertai nilai dalam lajur yang ditentukan. Walau bagaimanapun, fungsi ini mungkin menghasilkan hasil pendua apabila mendapatkan semula nilai daripada lajur bukan unik.
Soalan:
Gunakan fungsi LISTAGG apabila anda mahu mengambil hanya nilai unik daripada lajur tanpa perlu menggunakan fungsi atau prosedur. Sebagai contoh, pertimbangkan jadual berikut:
col1 | col2 |
---|---|
1 | 2 |
1 | 2 |
1 | 3 |
1 | 4 |
1 | 5 |
Apabila anda menggunakan LISTAGG pada col2, anda mungkin mendapat hasil berikut: [2,2,3,4,5]. Matlamatnya adalah untuk menghapuskan pendua 2 dan hanya menunjukkan nilai unik.
Penyelesaian:
19c dan ke atas:
<code class="language-sql">select listagg(distinct col2, ',') within group (order by col2) from the_table;</code>
18c dan lebih awal:
<code class="language-sql">select listagg(col2, ',') within group (order by col2) from ( select distinct col2 from the_table ) t;</code>
Pertanyaan ini menggunakan kata kunci DISTINCT dalam fungsi LISTAGG untuk memastikan bahawa hanya nilai unik disertakan.
Lajur tambahan:
Jika anda perlu mendapatkan semula berbilang lajur bersama-sama dengan nilai unik, anda boleh melakukan perkara berikut:
<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>
Pertanyaan ini memberikan nombor baris unik kepada setiap gabungan col1 dan col2 dan kemudian memilih baris pertama untuk setiap kumpulan col1.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Hanya Nilai Berbeza Menggunakan Fungsi LISTAGG Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!