• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    SQL中聚类后字段数据串联字符串方法常见示例代码

    发布者: 天下网吧 | 发布时间: 2025-6-18 09:18| 查看数: 34| 评论数: 0|帖子模式

    前言

    在 SQL 中,使用 聚类(
    1. GROUP BY)
    复制代码
    后将某个字段的数据串联为一个字符串,常见的方法包括以下几种,取决于数据库管理系统(DBMS)的具体支持功能:

    1. 使用 GROUP_CONCAT (MySQL 等支持)

    GROUP_CONCAT 是 MySQL 提供的函数,用于将分组中的字段值串联成字符串。
    1. SELECT group_column, GROUP_CONCAT(field_to_concatenate SEPARATOR ',') AS concatenated_string
    2. FROM table_name
    3. GROUP BY group_column;
    复制代码

      1. SEPARATOR
      复制代码
      参数
      :定义连接的分隔符(默认为逗号
      1. ,
      复制代码
      )。
    • 支持系统:MySQL、MariaDB。

    2. 使用 STRING_AGG (SQL Server、PostgreSQL 等支持)
    1.     STRING_AGG
    复制代码
    是更现代化的函数,用于将字段值连接为一个字符串。
    1. -- PostgreSQL / SQL Server
    2. SELECT group_column, STRING_AGG(field_to_concatenate, ',') AS concatenated_string
    3. FROM table_name
    4. GROUP BY group_column;
    复制代码

      1. STRING_AGG
      复制代码
      语法


      • 第一个参数是要连接的字段。
      • 第二个参数是分隔符。

    • 支持系统:PostgreSQL、SQL Server(2017+)。

    3. 使用 XML 或 JSON 方法(SQL Server)

    在 SQL Server 中,也可以使用 XML 路径或者 JSON 的方法进行字符串连接。

    XML PATH 方法
    1. SELECT group_column, STUFF( (SELECT ',' + field_to_concatenate
    2. FROM table_name t2
    3. WHERE t2.group_column = t1.group_column
    4. FOR XML PATH('')), 1, 1, '') AS concatenated_string
    5.     FROM table_name t1
    6.     GROUP BY group_column;
    复制代码

    • 原理:利用
      1. FOR XML PATH('')
      复制代码
      将数据生成无标签的 XML,然后用
      1. STUFF
      复制代码
      去掉前导逗号。

    JSON PATH 方法(SQL Server 2017+)
    1. SELECT group_column, STRING_AGG(field_to_concatenate, ',') AS concatenated_string
    2. FROM table_name
    3. GROUP BY group_column;
    复制代码
    4. 递归 CTE 或用户定义函数(适合不支持内置串联函数的数据库)

    对于不支持
    1. GROUP_CONCAT
    复制代码
    1. STRING_AGG
    复制代码
    的数据库,可以通过递归 CTE 或用户定义的函数实现。

    示例:递归 CTE(SQL Server)
    1. WITH CTE AS
    2. (
    3.     SELECT group_column,
    4.            field_to_concatenate AS concatenated_string,
    5.            ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY id) AS row_num
    6.     FROM table_name
    7.     UNION ALL
    8.     SELECT cte.group_column,
    9.            cte.concatenated_string + ',' + t.field_to_concatenate,
    10.            cte.row_num + 1
    11.            FROM CTE cte
    12.            JOIN table_name t
    13.            ON cte.group_column = t.group_column AND
    14.               t.row_num = cte.row_num + 1
    15. )
    16. SELECT group_column,
    17.        MAX(concatenated_string) AS concatenated_string
    18. FROM CTE
    19. GROUP BY group_column;
    复制代码
    5. 手动拼接(通过程序语言处理)

    如果数据库本身不支持上述方法,可以在程序端(如 Python、JavaScript、PHP 等)处理分组并拼接字符串。

    总结


    • 推荐方法:尽量使用 DBMS 内置的函数(如
      1. GROUP_CONCAT
      复制代码
      1. STRING_AGG
      复制代码
      ),实现简单高效。
    • 兼容性

      • MySQL、MariaDB:
        1. GROUP_CONCAT
        复制代码
      • PostgreSQL、SQL Server(2017+):
        1. STRING_AGG
        复制代码
      • SQL Server(旧版本):
        1. XML PATH
        复制代码
      • 其他数据库:可以考虑递归 CTE 或程序端处理。

    到此这篇关于SQL中聚类后字段数据串联字符串方法的文章就介绍到这了,更多相关SQL聚类后字段数据串联字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/database/333674djl.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表