Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menggabungkan Rentetan daripada Medan Berkumpulan dalam PostgreSQL?

Bagaimana untuk Menggabungkan Rentetan daripada Medan Berkumpulan dalam PostgreSQL?

Linda Hamilton
Lepaskan: 2025-01-22 08:31:09
asal
370 orang telah melayarinya

How to Concatenate Strings from a Grouped Field in 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

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:

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

Anda juga boleh menentukan klausa ORDER BY dalam ungkapan agregat untuk mengawal susunan nilai yang digabungkan.

PostgreSQL versi 8.4

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

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

PostgreSQL 8.3 dan lebih awal

Sebelum PostgreSQL 8.4, tiada fungsi agregat terbina dalam untuk menggabungkan rentetan. Fungsi agregat tersuai boleh dibuat menggunakan pernyataan CREATE AGGREGATE:

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

Fungsi agregat asas ini hanya menggabungkan semua rentetan dalam kumpulan. Anda juga boleh mencipta fungsi tersuai yang menambah pemisah antara nilai yang digabungkan, contohnya:

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

Anda kemudian boleh menggunakan fungsi agregat tersuai dalam pertanyaan GROUP BY untuk menggabungkan rentetan:

SELECT company_id, textcat_all(commacat(NULL, employee)) AS concatenated_employees
FROM mytable
GROUP BY company_id;
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan