Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Rentetan dalam Pertanyaan `kumpulan oleh` PostgreSQL?

Bagaimana untuk Menggabungkan Rentetan dalam Pertanyaan `kumpulan oleh` PostgreSQL?

Susan Sarandon
Susan Sarandonasal
2025-01-22 08:41:09868semak imbas

How to Concatenate Strings within a PostgreSQL `group by` Query?

Sambungkan medan rentetan dalam PostgreSQL group by pertanyaan

Apabila memproses data dalam pangkalan data PostgreSQL, anda mungkin perlu menggabungkan rentetan untuk medan tertentu dalam pertanyaan group by. Ini boleh dicapai dalam pelbagai cara, bergantung pada versi PostgreSQL.

PostgreSQL 9.0 dan lebih tinggi

Versi PostgreSQL moden (dikeluarkan selepas 2010) menyediakan fungsi string_agg(expression, delimiter). Fungsi ini membenarkan menggabungkan rentetan dalam pertanyaan group by, dipisahkan oleh pembatas yang ditentukan.

Sebagai contoh, untuk menyertai medan COMPANY_ID dalam setiap kumpulan EMPLOYEE, anda boleh menggunakan pertanyaan berikut:

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

PostgreSQL 8.4.x

Dalam PostgreSQL 8.4, anda boleh menggunakan array_agg(expression) fungsi agregat untuk mengumpul nilai ke dalam tatasusunan. Tatasusunan kemudiannya boleh ditukar menjadi rentetan bercantum 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.x dan versi yang lebih rendah

Dalam versi PostgreSQL yang lebih lama, tiada fungsi agregat terbina dalam untuk penggabungan rentetan. Satu pelaksanaan tersuai melibatkan mencipta fungsi agregat tersuai menggunakan fungsi textcat:

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

Selain itu, fungsi sambungan tersuai boleh dibuat untuk mengendalikan keperluan tertentu, seperti mengabaikan nilai nol atau rentetan kosong:

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

Menggunakan fungsi ini, anda boleh mengubah suai pertanyaan seperti berikut:

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

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Rentetan dalam Pertanyaan `kumpulan oleh` 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