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
相关产品推荐
相关产品推荐

