假设我有一张这样的 table
| id_grupo | nombre |
|:---------|----------------:|
| 1 | Emprendedores 1 |
| 2 | Emprendedores 2 |
| 3 | Emprendedoras 1 |
| 4 | Emprendedoras 2 |
| 5 | Los amigos 1 |
| 6 | Los amigos 2 |
| 7 | Los amigos no 1 |
我想按相同但结尾数字不同的名称进行分组。如果仔细观察,会发现有些名称由两个或多个单词组成,但区别在于结尾。还有一些看起来相似但不一样的名字,比如“Los amigos”和“Los amigos no”,它们属于不同的群体,“Emprendores”和“Emprendoras”也是不同的。
这是我的查询:
SELECT *, GROUP_CONCAT(id_grupo)
FROM creabien_sacredi_dev.grupos
GROUP BY SUBSTRING(nombre,1,5)
它适用于大多数记录,但问题出在与示例中非常相似的字符串上。我选择了一个包含 5 个字符的子字符串,但实际上名称的长度不同,因此某些字符串无法按预期工作。
如何按以下形式对这些字符串进行分组?
| id_grupo | nombre | GROUP_CONCAT(id_grupo) |
|:---------|----------------:|-----------------------:|
| 1 | Emprendedores 1 | 1,2 |
| 3 | Emprendedoras 1 | 3,4 |
| 5 | Los amigos 1 | 5,6 |
| 7 | Los amigos no 1 | 7 |
我认为关键在于最后一个数字与前面的字符串必须完全相同,但我不知道该怎么做。你能帮我一下吗?
编辑:
还有像“Emprendores”这样的记录末尾没有任何数字,这也应该与“Emprendores 1”和“Emprendores 2”分组。所以我认为数字不再是关键,事实上我怀疑是否存在一种方法来对这些记录进行分组。
最佳答案
以下怎么样:
SELECT CASE
WHEN RIGHT(nombre, 1) BETWEEN '0' AND '9' THEN
LEFT(nombre, Length(nombre) - 2)
ELSE nombre
END AS nombrechecked,
Group_concat(id_grupo)
FROM grupos
GROUP BY 1
这是SQL Fiddle这表明它有效。
关于mysql - 按相似字符串分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20222990/