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:
SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;
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()
:
SELECT company_id, array_to_string(array_agg(employee), ', ') FROM mytable GROUP BY company_id;
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
:
CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );
Selain itu, fungsi sambungan tersuai boleh dibuat untuk mengendalikan keperluan tertentu, seperti mengabaikan nilai nol atau rentetan kosong:
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;
Menggunakan fungsi ini, anda boleh mengubah suai pertanyaan seperti berikut:
SELECT company_id, commacat_ignore_nulls(employee) FROM mytable GROUP BY company_id;
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!