【问题标题】:Is it possible to GROUP BY treating certain characters the same?是否可以 GROUP BY 对待某些字符相同?
【发布时间】:2014-08-12 15:15:00
【问题描述】:

我有这样的数据表:

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 的建议很有用,但可能不是部署的好主意。

根据 Jim 的建议,我对 surname 列索引的表进行了以下测试:

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

【问题讨论】:

    标签: mysql group-by latin


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的建议。我需要数据保持原样,但出于 GROUP BY 的目的,仍将它们视为相同。我会对此进行更多调查,如果证明是最佳解决方案,我会接受您的回答。
    猜你喜欢
    • 2020-07-16
    • 2017-04-19
    • 2011-03-22
    • 2010-12-22
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多