Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggabungkan Rentetan dalam KUMPULAN PostgreSQL OLEH Pertanyaan?

Bagaimana untuk Menggabungkan Rentetan dalam KUMPULAN PostgreSQL OLEH Pertanyaan?

DDD
DDDasal
2025-01-22 08:37:12504semak imbas

How to Concatenate Strings Within a PostgreSQL GROUP BY Query?

Bagaimana untuk menggabungkan rentetan dalam pertanyaan GROUP BY PostgreSQL?

Soalan:

Dalam PostgreSQL, bagaimana untuk menggabungkan rentetan medan dalam pertanyaan GROUP BY?

Contoh:

Pertimbangkan jadual dengan skema berikut:

ID COMPANY_ID EMPLOYEE
1 1 Anna
2 1 Bill
3 2 Carol
4 2 Dave

Matlamatnya adalah untuk mengumpulkan mengikut COMPANY_ID dan menggabungkan nilai EMPLOYEE, menghasilkan yang berikut:

COMPANY_ID EMPLOYEE
1 Anna, Bill
2 Carol, Dave

Penyelesaian:

PostgreSQL 9.0 atau lebih tinggi:

  • Gunakan fungsi string_agg(expression, delimiter):
<code class="language-sql">SELECT company_id, string_agg(employee, ', ')
FROM mytable
GROUP BY company_id;</code>

PostgreSQL 8.4.x:

  • Gunakan fungsi array_agg(expression) untuk menggabungkan array_to_string():
<code class="language-sql">SELECT company_id, array_to_string(array_agg(employee), ', ')
FROM mytable
GROUP BY company_id;</code>

PostgreSQL 8.3.x dan lebih awal:

  • Buat fungsi agregat tersuai untuk menggabungkan rentetan:
<code class="language-sql">CREATE AGGREGATE textcat_all(
    basetype = text,
    sfunc = textcat,
    stype = text,
    initcond = ''
);

SELECT company_id, textcat_all(employee)
FROM mytable
GROUP BY company_id;</code>
  • Secara pilihan, anda boleh mencipta fungsi untuk menyesuaikan gelagat gabungan, seperti menambah pemisah.

Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Rentetan dalam KUMPULAN PostgreSQL OLEH Pertanyaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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