You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带Sum求和与分组功能的Select查询及item列合并实现求助

示例业务表结构

分组求和+合并item列实现方案

不同数据库对应的字符串聚合语法略有差异,通用实现逻辑为「GROUP BY指定分组维度 + 数值字段用SUM()求和 + 文本item字段用对应数据库的字符串聚合函数合并」,各主流数据库示例如下:

  • MySQL
    使用GROUP_CONCAT函数实现字段合并,示例代码:

    SELECT 
      分组列名,
      GROUP_CONCAT(item SEPARATOR ',') AS merged_items,
      SUM(需要求和的数值列名) AS total_value
    FROM 你的表名
    GROUP BY 分组列名;
    

    若需要合并的item去重,可改写为GROUP_CONCAT(DISTINCT item SEPARATOR ','),分隔符可自行替换为空格、斜杠等其他符号。

  • PostgreSQL
    使用STRING_AGG函数实现字段合并,示例代码:

    SELECT 
      分组列名,
      STRING_AGG(item, ',' ORDER BY item) AS merged_items,
      SUM(需要求和的数值列名) AS total_value
    FROM 你的表名
    GROUP BY 分组列名;
    
  • SQL Server
    2017及以上版本使用STRING_AGG函数,示例代码:

    SELECT 
      分组列名,
      STRING_AGG(item, ',') WITHIN GROUP (ORDER BY item) AS merged_items,
      SUM(需要求和的数值列名) AS total_value
    FROM 你的表名
    GROUP BY 分组列名;
    

    2016及更低版本可通过FOR XML PATH语法实现,示例:

    SELECT 
      分组列名,
      STUFF((SELECT ',' + item FROM 你的表名 t2 WHERE t2.分组列名 = t1.分组列名 FOR XML PATH('')),1,1,'') AS merged_items,
      SUM(需要求和的数值列名) AS total_value
    FROM 你的表名 t1
    GROUP BY 分组列名;
    
  • Oracle
    11gR2及以上版本使用LISTAGG函数,示例代码:

    SELECT 
      分组列名,
      LISTAGG(item, ',') WITHIN GROUP (ORDER BY item) AS merged_items,
      SUM(需要求和的数值列名) AS total_value
    FROM 你的表名
    GROUP BY 分组列名;
    

    若合并后字符串长度超过varchar上限,可改用XMLAGG函数处理。

注意:GROUP BY后指定的列,需要覆盖SELECT子句中所有未使用聚合函数的字段,否则会触发语法错误。

内容的提问来源于stack exchange,提问作者Mumhammad Mumtaz Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:15:03