Rumah >pangkalan data >tutorial mysql >Bagaimanakah Pangkalan Data SQL Berbeza Melaksanakan Pengagregatan Rentetan (LISTAGG)?
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:
FungsiSQLite 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!