mysql - 是否可以通过对某些字符进行相同的处理来进行分组?

标签 mysql group-by latin

我有包含这样数据的表格:

forename        surname
John            O'Neil
Aaron           O Neil
Peter           O-Neil
Mary            Tollmache-Tollmache
Beatrice        Tollmache Tollmache

所有数据均已经过清理,因此它们仅包含拉丁语和拉丁语补充字符表中的字符,以及空格 ( )、撇号 (') 和连字符 (-)。

执行 GROUP BY 时是否可以将空格 ( )、撇号 (') 和连字符 (-) 视为相同的字符。

因此,以上表为例,执行以下查询:

SELECT surname, COUNT(*) AS cnt FROM tbl GROUP BY surname;

将返回:

surname                cnt
O'Neil                 3
Tollmache-Tollmache    2

更新:如果您像我一样使用此查询来构建其他表,吉姆的建议是有用的,但对于部署来说可能不是一个好主意。

根据 Jim 的建议,我对带有索引的姓氏列的表运行了以下测试:

550,000 row table: 4.98 seconds
3.375 million row table: 27.62 seconds
12.485 million row table: 1 min 33 seconds

最佳答案

您可以使用REPLACE将这些字符转换为空格(或撇号等)并检查:

SELECT surname, 
COUNT(*) AS cnt 
FROM tbl 
GROUP BY REPLACE(REPLACE(surname,"-"," "),"'"," ");

可能值得确保数据库中的数据采用您想要的格式,而不是动态转换它。

关于mysql - 是否可以通过对某些字符进行相同的处理来进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268009/

相关文章:

mysql - 重复键更新,连接表字段

Django - ORM 问题

mysql - 在 MYSQL 查询中使用 GROUP BY 和 union

sql - 计算 LEFT JOIN 和 WHERE

java - 将单词转换为 Pig Latin

html - Google 字体、CSS、拉丁语问题

c - Pig Latin 翻译器-逆向翻译错误

mysql - 如何将mysql表行转换为列

mysql - 我无法从具有外部连接的 View 进行更新

php - 从 mysql 插入语句中删除链接?