Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengalih Keluar Pendua Apabila Menggunakan Fungsi LISTAGG Oracle?

Bagaimanakah Saya Boleh Mengalih Keluar Pendua Apabila Menggunakan Fungsi LISTAGG Oracle?

Barbara Streisand
Lepaskan: 2025-01-19 18:12:11
asal
596 orang telah melayarinya

How Can I Remove Duplicates When Using Oracle's LISTAGG Function?

Oracle LISTAGG: Mengendalikan Nilai Pendua untuk Hasil Unik

Fungsi LISTAGG Oracle, walaupun berkuasa untuk mengagregat data, tidak semestinya mengalih keluar masukan pendua. Ia menggabungkan semua nilai, termasuk pengulangan, ke dalam satu rentetan. Begini cara untuk mencapai pengagregatan nilai yang berbeza:

Kaedah untuk Oracle 19c dan Kemudian:

Oracle 19c dan versi yang lebih baru menawarkan penyelesaian yang dipermudahkan:

<code class="language-sql">SELECT LISTAGG(DISTINCT the_column, ',') WITHIN GROUP (ORDER BY the_column)
FROM the_table;</code>
Salin selepas log masuk

Ini secara langsung menggabungkan kata kunci DISTINCT dalam fungsi LISTAGG itu sendiri.

Kaedah untuk Oracle 18c dan Terdahulu:

Untuk versi lama (18c dan ke bawah), subquery 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>
Salin selepas log masuk

Pertama kali ini hanya memilih nilai unik dalam subkueri, kemudian digunakan LISTAGG pada hasil carian tersebut.

Termasuk Berbilang Lajur:

Untuk memasukkan lajur tambahan dan mengekalkan keunikan, pendekatan yang lebih maju diperlukan:

<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

Ini menggunakan ROW_NUMBER() untuk menetapkan kedudukan unik kepada setiap gabungan col1 dan col2. Pertanyaan luar kemudian hanya memilih kejadian pertama (rn = 1) untuk setiap gabungan unik, memastikan pendua dihapuskan sebelum pengagregatan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengalih Keluar Pendua 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