首页 > 解决方案 > 根据常见的第一个单词将字符串分组在一起

问题描述

我有一份不同物品的清单,其中一些在末尾有尺寸和颜色说明。例如男子足球夹克 - L / 黑色。

我希望能够对所有男士足球夹克产品进行分组,无论尺寸或颜色如何。

╔═══════════════════════════════════╤══════╗
║ Item                              │ Sold ║
╠═══════════════════════════════════╪══════╣
║ Men's Football Jacket - L / Blue  │ 5    ║
╟───────────────────────────────────┼──────╢
║ Men's Football Jacket - M / Black │ 3    ║
╟───────────────────────────────────┼──────╢
║ Women's Socks - S                 │ 8    ║
╟───────────────────────────────────┼──────╢
║ Women's Socks - L                 │ 10   ║
╟───────────────────────────────────┼──────╢
║ Gloves                            │ 12   ║
╚═══════════════════════════════════╧══════╝

Output:
╔═══════════════════════╤══════╗
║ Item                  │ Sold ║
╠═══════════════════════╪══════╣
║ Men's Football Jacket │ 8    ║
╟───────────────────────┼──────╢
║ Women's Socks         │ 18   ║
╟───────────────────────┼──────╢
║ Gloves                │ 12   ║
╚═══════════════════════╧══════╝

从示例中可以看出,有些项目在字符串中只有大小,而其他项目既没有指定大小也没有指定颜色。

如果这有所作为,我正在使用 MySQL。

标签: mysqlsql

解决方案


如果要按 Item 的值进行分组,直到 1st -,请使用SUBSTRING_INDEX()提取字符串的该部分:

SELECT SUBSTRING_INDEX(Item, '-', 1) Item, 
       SUM(Sold) Sold
FROM tablename
GROUP BY SUBSTRING_INDEX(Item, '-', 1)

请参阅演示
结果:

> Item                  | Sold
> :-------------------- | ---:
> Gloves                |   12
> Men's Football Jacket |    8
> Women's Socks         |   18

推荐阅读