GROUP BY是否可以对某些字符进行相同处理?

时间:2014-08-12 15:15:00

标签: mysql group-by latin

我有这样的数据表:

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

所有数据都已经过清理,因此它们只包含拉丁语和拉丁语补充字符表中的字符,以及space(),appostrophe(')和连字符( - )。

执行GROUP BY时,是否可以将字符space(),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

1 个答案:

答案 0 :(得分:1)

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

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

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