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

如何用SUM()与GROUP BY对同类型子类数据分组求和?

问题分析

原SQL存在两个核心问题:

  1. 求和字段错误:你需要对数值型的col2求和,但原语句写了sum(col1)——col1是字符串类型,这个求和逻辑完全错误。
  2. 分组维度错误:原语句按完整的col1值分组,会得到4条独立结果,而你需要按col1中的品类(milk/coffee)分组。
解决方案

核心思路是先从col1中提取出品类名称,再按品类分组对col2求和。不同数据库的字符串提取函数略有差异,以下是主流数据库的实现方式:

MySQL/MariaDB

用SUBSTRING_INDEX提取-分隔后的后缀:

SELECT
  SUBSTRING_INDEX(col1, '-', -1) AS category,
  SUM(col2) AS total
FROM your_table
GROUP BY SUBSTRING_INDEX(col1, '-', -1);

SQL Server

通过CHARINDEX定位-的位置,再用RIGHT截取后缀:

SELECT
  RIGHT(col1, LEN(col1) - CHARINDEX('-', col1)) AS category,
  SUM(col2) AS total
FROM your_table
GROUP BY RIGHT(col1, LEN(col1) - CHARINDEX('-', col1));

Oracle

用INSTR找到-的位置,结合SUBSTR提取后缀:

SELECT
  SUBSTR(col1, INSTR(col1, '-') + 1) AS category,
  SUM(col2) AS total
FROM your_table
GROUP BY SUBSTR(col1, INSTR(col1, '-') + 1);

PostgreSQL(正则方式)

支持正则表达式直接替换掉前缀:

SELECT
  REGEXP_REPLACE(col1, '.*-', '') AS category,
  SUM(col2) AS total
FROM your_table
GROUP BY REGEXP_REPLACE(col1, '.*-', '');
预期结果

执行上述语句后,会得到符合需求的结果:

categorytotal
milk300
coffee30

内容的提问来源于stack exchange,提问作者Miloudz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:12:31