我有包含这样数据的表格:
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/