Sqlite 在一列中计算相似的条目

Sqlite 在一列中计算相似的条目,sqlite,Sqlite,比如说,我在人口普查中统计的姓氏如下: select surname, count(*) from census where (surname like "Mc%" or surname like "Mac%" or surname like "Mag%") group by surname order by count(*) desc; 并获得以下信息: McGee 1000 McDonald 990 Mc Gee 221 Mage

比如说,我在人口普查中统计的姓氏如下:

select surname, count(*) from census where (surname like "Mc%" or surname like "Mac%" or surname like "Mag%") group by surname order by count(*) desc;
并获得以下信息:

McGee 1000
McDonald 990
Mc Gee 221
Magee 210
McGinn 200
Macdonald 100    
Maginn 30
在sqlite中是否有方法获得以下结果,或者我应该坚持编程此结果:

MACGEE 1221
MACDONALD 1090     
MAGEE 210   
MACGINN 200
MAGINN 30   

因此,我将McX、McX和MacX归为一个姓氏。

使用CTE返回结果中所需的所有前缀及其替换项(如果有),并将其加入表中。
进行所有必要的替换,然后按结果姓氏分组:

WITH cte(prefix, replacement) AS (VALUES ('MC', 'MAC'), ('MAC', 'MAC'), ('MAG', 'MAG'))
SELECT UPPER(c.replacement || SUBSTR(REPLACE(t.surname, ' ', ''), LENGTH(c.prefix) + 1)) name,
       COUNT(*) total 
FROM tablename t INNER JOIN cte c
ON t.surname LIKE c.prefix || '%'
GROUP BY name 

请参阅。

如何在结果中获得“mage”和“magnn”?@forpas通过更正我的问题:)@forpas我意识到现在Mag示例更复杂,因此我认为最好不要将其与Mac组合。