Rumah > pangkalan data > tutorial mysql > Adakah Oracle Mempunyai Fungsi yang Setara dengan `group_concat` MySQL?

Adakah Oracle Mempunyai Fungsi yang Setara dengan `group_concat` MySQL?

Barbara Streisand
Lepaskan: 2025-01-15 12:36:45
asal
860 orang telah melayarinya

Does Oracle Have a Function Equivalent to MySQL's `group_concat`?

Agregasi Rentetan Oracle dan MySQL: Mencari Setara dengan group_concat

Tugas pangkalan data selalunya memerlukan gabungan data berbilang baris ke dalam satu rentetan. Fungsi group_concat MySQL memudahkan proses ini. Tetapi bagaimana Oracle mencapai hasil yang sama?

Penyelesaian Oracle

Oracle menawarkan beberapa cara untuk meniru fungsi group_concat MySQL:

Untuk Oracle 11g dan versi yang lebih baru, fungsi LISTAGG menyediakan persamaan langsung:

<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS "names"
FROM table_x
GROUP BY col1</code>
Salin selepas log masuk

Ini mengagregatkan nilai col2 dengan kemas untuk setiap col1 kumpulan, memisahkannya dengan ', '. Klausa ORDER BY memastikan susunan rentetan yang konsisten.

Versi Oracle yang lebih lama (10g dan ke bawah) memerlukan fungsi tersuai. Berikut ialah contoh:

<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val NUMBER)
RETURN VARCHAR2
IS
  return_text VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    return_text := return_text || ',' || x.col2 ;
  END LOOP;
  RETURN LTRIM(return_text, ',');
END;
/</code>
Salin selepas log masuk

Fungsi ini berulang melalui baris, menambahkan nilai pada return_text. Fungsi LTRIM mengalih keluar koma di hadapan. Penggunaan:

<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
Salin selepas log masuk

Perhatikan bahawa WM_CONCAT wujud dalam beberapa versi Oracle lama tetapi kini tidak disokong.

MySQL group_concat untuk Perbandingan

Untuk kejelasan, berikut ialah sintaks MySQL group_concat:

<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
Salin selepas log masuk

Ini secara ringkas mengagregatkan nilai col2 setiap col1 kumpulan. Walaupun ia tidak mempunyai keupayaan pesanan yang jelas LISTAGG, ia mempunyai tujuan yang sama.

Atas ialah kandungan terperinci Adakah Oracle Mempunyai Fungsi yang Setara dengan `group_concat` MySQL?. 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