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
Lepaskan: 2025-01-22 08:41:09
asal
867 orang telah melayarinya

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:

SELECT company_id, string_agg(employee, ', ')
FROM mytable
GROUP BY company_id;
Salin selepas log masuk

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():

SELECT company_id, array_to_string(array_agg(employee), ', ')
FROM mytable
GROUP BY company_id;
Salin selepas log masuk

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:

CREATE AGGREGATE textcat_all(
  basetype    = text,
  sfunc       = textcat,
  stype       = text,
  initcond    = ''
);
Salin selepas log masuk

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;
Salin selepas log masuk

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

SELECT company_id, commacat_ignore_nulls(employee)
FROM mytable
GROUP BY company_id;
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan