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

Mysql 是否可以通过对某些字符进行相同的处理来分组?,mysql,group-by,latin,Mysql,Group By,Latin,我有数据如下的表格: forename surname John O'Neil Aaron O Neil Peter O-Neil Mary Tollmache-Tollmache Beatrice Tollmache Tollmache 所有数据都已被SANATIZE,因此它们只包含拉丁和拉丁补充字符表中的字符,以及空格()、appostrophe(')和连字符(-) 在执行GRO

我有数据如下的表格:

forename        surname
John            O'Neil
Aaron           O Neil
Peter           O-Neil
Mary            Tollmache-Tollmache
Beatrice        Tollmache Tollmache
所有数据都已被SANATIZE,因此它们只包含拉丁和拉丁补充字符表中的字符,以及空格()、appostrophe(')和连字符(-)

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

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

SELECT surname, COUNT(*) AS cnt FROM tbl GROUP BY surname;
将返回:

surname                cnt
O'Neil                 3
Tollmache-Tollmache    2
更新:如果您像我一样使用此查询来构建其他表,那么Jim的建议很有用,但可能不是部署的好主意

根据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
将这些字符转换为空格(或撇号e.t.c.)并选中:

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

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

谢谢您的建议。我需要数据保持原样,但仍将它们视为相同的数据,以供分组时使用。我将对此进行更多的调查,并接受你的答案,如果它证明是最好的解决方案。