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

MySQL 8.0提取产品特征字符并分组求和的技术求助

MySQL 8.0 产品变体分组及特征字符提取解决方案

我正在使用MySQL 8.0,需要从产品数据中提取特征字符,将同一产品的不同变体(如口味、是否包含运费、规格等)进行分组聚合。

原始产品数据

产品合计
Organic Rice Snacks - Apple6
Organic Rice Snacks - Rice5
62-Sam Almond Crisp Jujube - 20g4
62-Sam Almond Crisp Jujube - 20g (members-only)5
[Sale] Extra Virgin Sprouted Perilla Oil Best Before 9/3 or 9/11/2021 (160ml)3
[Sale] Extra Virgin Sprouted Perilla Oil Best Before 9/3 or 9/11/2021 (300ml)3.5
[Steak Family Set 4] Ribeye 12 oz. x 4 (Never frozen)20
[Steak Family Set 4] Ribeye 12 oz. x 4 (Shipping Included)21
Ecomom Sangol Organic Rice Snacks (Pack of Three)6
Ecomom Sangol Organic Rice Snacks - Apple7.5

期望分组结果

新产品名称总合计
Organic Rice Snacks11
62-Sam Almond Crisp Jujube9
[Sale] Extra Virgin Sprouted Perilla Oil Best Before 9/3 or 9/11/20216.5
[Steak Family Set 4] Ribeye41
Ecomom Sangol Organic Rice Snacks13.5

尝试的SQL语句(无法适配全部数据)

Select  rtrim(substring_index(substring_index(substring_index(Product, '-', 1), '(', 1), '[', 1)) as NewProduct, SUM(Total) as GTotal
From myData
Group By NewProduct

我曾提问过类似问题,但实际数据更为复杂,恳请帮忙解决该问题。


解决方案

针对需求,可利用MySQL 8.0支持的REGEXP_REPLACE函数,通过正则表达式匹配并移除所有变体相关后缀,提取产品核心名称后分组聚合:

SELECT
    TRIM(REGEXP_REPLACE(Product, 
        '(\\s*-\\s*.*)|(\\s*\\(.*\\))|(\\s+\\d+\\s*oz\\.\\s*x\\s*\\d+)', 
        '')) AS NewProduct,
    SUM(Total) AS GTotal
FROM myData
GROUP BY NewProduct;

正则规则说明:

  • \\s*-\\s*.*:匹配并移除所有以-(前后允许带空格)开头的变体后缀,如- Apple、- 20g
  • \\s*\\(.*\\):匹配并移除所有括号及其内部内容,如(members-only)、(160ml)、(Pack of Three)
  • \\s+\\d+\\s*oz\\.\\s*x\\s*\\d+:匹配并移除牛排产品中的规格信息12 oz. x 4

该语句可精准处理所有给出的产品场景,聚合结果与预期完全一致。若后续出现新的变体规则,只需在正则表达式中添加对应匹配模式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:37:42