Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Rentetan daripada Medan Berkumpulan dalam 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 (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 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>
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!