首頁 >資料庫 >mysql教程 >不同的SQL資料庫如何實作字串聚合(LISTAGG)?

不同的SQL資料庫如何實作字串聚合(LISTAGG)?

Susan Sarandon
Susan Sarandon原創
2025-01-22 13:06:10586瀏覽

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

各種 SQL 資料庫中的字串聚合

本文示範如何使用不同的 SQL 資料庫將多個字串值連接成一個字串。 目標是聚合一個字串欄位。

Oracle 和 DB2:

Oracle 和 DB2 都提供內建的 LISTAGG 函數。 文法很簡單:

<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 使用 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 及更高版本也支援STRING_AGG。 對於舊版(2017 年之前),需要使用 STUFFFOR XML PATH 的更複雜方法:

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

SQLite的GROUP_CONCAT函數可以進行字串聚合。 訂購需要 CTE 或子查詢:

訂購時:

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

未訂購:

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

以上是不同的SQL資料庫如何實作字串聚合(LISTAGG)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn