提问者:小点点

基于公共首词将字符串分组在一起


我有一个不同项目的清单,其中一些有一个尺寸和颜色描述在末尾。例如。男士足球夹克-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个答案

匿名用户

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

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

匿名用户

如果要按第一个之前的Item值分组,请使用提取字符串的该部分:

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

请参阅演示。br>结果:

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