首页 > 数据库 > mysql教程 > 不同的SQL数据库如何实现字符串聚合(LISTAGG)?

不同的SQL数据库如何实现字符串聚合(LISTAGG)?

Susan Sarandon
发布: 2025-01-22 13:06:10
原创
521 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板