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
Lepaskan: 2025-01-22 13:06:10
asal
527 orang telah melayarinya

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

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

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

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

Tanpa Pesanan:

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

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!

sumber:php.cn
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