根据常见的第一个单词将字符串分组在一起

时间:2021-01-05 14:33:12

标签: mysql sql

我有一个不同项目的列表,其中一些在最后有尺寸和颜色说明。例如。男式足球夹克 - 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。

2 个答案:

答案 0 :(得分:1)

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

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

参见demo
结果:

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

答案 1 :(得分:1)

如果值总是由空格-连字符-空格分隔,那么只需使用substring_index()

select substring_index(item, ' - ', 1) as item,
       sum(sold)
from t
group by substring_index(item, ' - ', 1) ;
相关问题