Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pangkalan Data SQL Berbeza Melaksanakan Pengagregatan Rentetan (LISTAGG)?

Bagaimanakah Pangkalan Data SQL Berbeza Melaksanakan Pengagregatan Rentetan (LISTAGG)?

Susan Sarandon
Susan Sarandonasal
2025-01-22 13:06:10527semak imbas

How Do Different SQL Databases Implement String Aggregation (LISTAGG)?

Penggabungan Rentetan dalam Pelbagai Pangkalan Data SQL

Artikel ini menunjukkan cara menggabungkan berbilang nilai rentetan ke dalam rentetan tunggal menggunakan pangkalan data SQL yang berbeza. Matlamatnya ialah untuk mengagregat medan rentetan.

Oracle dan DB2:

Kedua-dua Oracle dan DB2 menawarkan fungsi LISTAGG terbina dalam. Sintaksnya adalah mudah:

<code class="language-sql">SELECT FieldA,
       LISTAGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;</code>

PostgreSQL:

PostgreSQL menggunakan fungsi STRING_AGG:

<code class="language-sql">SELECT FieldA,
       STRING_AGG(FieldB, ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;</code>

SQL Server:

SQL Server 2017 dan versi yang lebih baru turut menyokong STRING_AGG. Untuk versi lama (pra-2017), pendekatan yang lebih kompleks menggunakan STUFF dan FOR XML PATH diperlukan:

<code class="language-sql">WITH CTE_TableName AS (
    SELECT FieldA, FieldB
    FROM TableName
)
SELECT t0.FieldA,
       STUFF((
           SELECT ',' + t1.FieldB
           FROM CTE_TableName t1
           WHERE t1.FieldA = t0.FieldA
           ORDER BY t1.FieldB
           FOR XML PATH('')
       ), 1, LEN(','), '') AS FieldBs
FROM CTE_TableName t0
GROUP BY t0.FieldA
ORDER BY FieldA;</code>

SQLite:

Fungsi

SQLite GROUP_CONCAT boleh melakukan pengagregatan rentetan. Pesanan memerlukan CTE atau subquery:

Dengan Pesanan:

<code class="language-sql">WITH CTE_TableName AS (
    SELECT FieldA, FieldB
    FROM TableName
    ORDER BY FieldA, FieldB
)
SELECT FieldA,
       GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM CTE_TableName
GROUP BY FieldA
ORDER BY FieldA;</code>

Tanpa Pesanan:

<code class="language-sql">SELECT FieldA,
       GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;</code>

Atas ialah kandungan terperinci Bagaimanakah Pangkalan Data SQL Berbeza Melaksanakan Pengagregatan Rentetan (LISTAGG)?. 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