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

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

Susan Sarandon
發布: 2025-01-22 13:06:10
原創
564 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板