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

SQL Server中如何对相似产品名称字符串进行分组汇总

解决方法

我们可以通过匹配产品命名的规则提取核心名称,不需要依赖固定长度截取,按核心名称分组汇总即可得到结果。

适配所有数据库的通用逻辑

所有关联产品的版本后缀均以 V(空格+大写V)开头,我们只需截取第一个 V 之前的内容作为分组维度,汇总销量即可。

各主流数据库实现代码

MySQL

-- 写法1:适配版本后缀为V开头的场景
SELECT 
  TRIM(SUBSTRING_INDEX(Name, ' V', 1)) AS Name,
  SUM(QtySold) AS QtySold
FROM 你的表名
GROUP BY TRIM(SUBSTRING_INDEX(Name, ' V', 1));

-- 写法2:如果核心名称固定为Product + 数字格式,用正则匹配更精准
SELECT 
  REGEXP_SUBSTR(Name, '^Product\\s+\\d+') AS Name,
  SUM(QtySold) AS QtySold
FROM 你的表名
GROUP BY REGEXP_SUBSTR(Name, '^Product\\s+\\d+');

PostgreSQL

-- 写法1:适配版本后缀为V开头的场景
SELECT 
  TRIM(SPLIT_PART(Name, ' V', 1)) AS Name,
  SUM(QtySold) AS QtySold
FROM 你的表名
GROUP BY TRIM(SPLIT_PART(Name, ' V', 1));

-- 写法2:核心名称固定为Product + 数字格式时使用
SELECT 
  SUBSTRING(Name FROM '^Product\\s+\\d+') AS Name,
  SUM(QtySold) AS QtySold
FROM 你的表名
GROUP BY SUBSTRING(Name FROM '^Product\\s+\\d+');

SQL Server

SELECT 
  CASE WHEN CHARINDEX(' V', Name) > 0 THEN TRIM(LEFT(Name, CHARINDEX(' V', Name) - 1))
       ELSE Name END AS Name,
  SUM(QtySold) AS QtySold
FROM 你的表名
GROUP BY CASE WHEN CHARINDEX(' V', Name) > 0 THEN TRIM(LEFT(Name, CHARINDEX(' V', Name) - 1))
              ELSE Name END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:27:01