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

Bagaimanakah Saya Boleh Mendapatkan Hanya Nilai Berbeza Menggunakan Fungsi LISTAGG Oracle?

Patricia Arquette
Lepaskan: 2025-01-19 18:21:09
asal
690 orang telah melayarinya

How Can I Retrieve Only Distinct Values Using Oracle's LISTAGG Function?

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

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

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

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!

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