Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Rentetan daripada Medan Berkumpulan dalam PostgreSQL?

Bagaimana untuk Menggabungkan Rentetan daripada Medan Berkumpulan dalam PostgreSQL?

Linda Hamilton
Linda Hamiltonasal
2025-01-22 08:31:09365semak imbas

How to Concatenate Strings from a Grouped Field in PostgreSQL?

Dalam pangkalan data PostgreSQL, adalah keperluan biasa untuk mengumpulkan mengikut medan tertentu dan menggabungkan nilai medan rentetan lain dalam setiap kumpulan. Kaedah pelaksanaan bergantung pada versi PostgreSQL.

PostgreSQL 9.0 dan ke atas

PostgreSQL 9.0 dan ke atas (sejak 2010) menyediakan fungsi string_agg(expression, delimiter) untuk tujuan ini. Untuk menggabungkan rentetan dalam medan rentetan bernama EMPLOYEE, anda boleh menggunakan pertanyaan berikut:

<code class="language-sql">SELECT company_id, string_agg(employee, ', ')
FROM mytable
GROUP BY company_id;</code>

Anda juga boleh menentukan klausa ORDER BY dalam ungkapan agregat untuk mengawal susunan nilai yang digabungkan.

PostgreSQL versi 8.4

PostgreSQL 8.4 memperkenalkan array_agg(expression)fungsi pengagregatan, yang mengumpul nilai ke dalam tatasusunan. Untuk mendapatkan rentetan bercantum anda boleh menggunakan fungsi array_to_string():

<code class="language-sql">SELECT company_id, array_to_string(array_agg(employee), ', ')
FROM mytable
GROUP BY company_id;</code>

PostgreSQL 8.3 dan lebih awal

Sebelum PostgreSQL 8.4, tiada fungsi agregat terbina dalam untuk menggabungkan rentetan. Fungsi agregat tersuai boleh dibuat menggunakan pernyataan CREATE AGGREGATE:

<code class="language-sql">CREATE AGGREGATE textcat_all(
  basetype    = text,
  sfunc       = textcat,
  stype       = text,
  initcond    = ''
);</code>

Fungsi agregat asas ini hanya menggabungkan semua rentetan dalam kumpulan. Anda juga boleh mencipta fungsi tersuai yang menambah pemisah antara nilai yang digabungkan, contohnya:

<code class="language-sql">CREATE FUNCTION commacat(acc text, instr text) RETURNS text AS $$
  BEGIN
    IF acc IS NULL OR acc = '' THEN
      RETURN instr;
    ELSE
      RETURN acc || ', ' || instr;
    END IF;
  END;
$$ LANGUAGE plpgsql;</code>

Anda kemudian boleh menggunakan fungsi agregat tersuai dalam pertanyaan GROUP BY untuk menggabungkan rentetan:

<code class="language-sql">SELECT company_id, textcat_all(commacat(NULL, employee)) AS concatenated_employees
FROM mytable
GROUP BY company_id;</code>

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Rentetan daripada Medan Berkumpulan dalam PostgreSQL?. 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