Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Rentetan dalam Pertanyaan `kumpulan oleh` PostgreSQL?
group by
pertanyaanApabila 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.
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>
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>
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!