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
Barbara Streisandasal
2025-01-15 12:36:45952semak imbas

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>

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>

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>

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>

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!

Kenyataan:
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