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
Magee 210
McGinn 200
Macdonald 100
Maginn 30
sqlite 有没有办法获得以下结果,或者我应该坚持对这个结果进行编程:
MACGEE 1221
MACDONALD 1090
MAGEE 210
MACGINN 200
MAGINN 30
所以我将 McX、Mc X 和 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
请参阅演示。
推荐阅读
- arduino - 在 Arduino 中的 udp 通信期间意外添加到数据包中的奇怪字符
- sql-server - 如何透视列并在之后更新透视数据
- ios - 跟踪与 Swift 中的联系人共享的链接
- linux - read -r 有什么作用?
- json - Spring JSON Patch 无法更新嵌套的 Map 对象
- c - 如何递归地乘以和打印2个数字的数字
- gojs - GoJS 中的自定义几何图形可以填充颜色吗?
- excel - Excel - 如何将列标题与行标题(日期)匹配并在 VBA 中返回查找值
- python - 导入pyqtgraph jupyter notebook时出错
- oracle - 从 Oracle PLSQL 消费 rest API 正在返回???用于阿拉伯字符