首页 > 解决方案 > 是否有一个 SQL 函数来计算地址相同但名称相似的唯一 ID?

问题描述

姓名 地址 ID
卡尔史密斯 14 独角兽 ln。 1
卡尔·史密斯 14 独角兽 ln。 2
安东尼贝尔 1734 大学大道。 3
卡尔·史密斯 14 独角兽 4
珍妮特·威尔逊 1734 大学 5
珍妮特·威尔逊 1734 大学 6

如何计算名称相似的每个地址的唯一客户 ID?数据集太长,无法使用 ilike 'carl smith',然后 ilike 'janet wilson'。这条线需要足够宽,以包含任何可能出现的类似名称。

期望的结果:

地址 身份证号码
14 独角兽 ln。 3
1734 大学 2

如果我能获得与同一地址相关联的相似名称的列表,那也会很有帮助。

期望的结果 Pt。2:

地址 相似的名字
14 独角兽 ln。 卡尔·史密斯,卡尔·史密斯,卡尔·史密斯
1734 大学 珍妮特威尔逊,珍妮特威尔逊

标签: sql

解决方案


如果唯一的区别是名称的大小写,则使用upper()/ lower()。对于您指定的结果:

select address, 
       count(*) as num_names,
       array_agg(name) as distinct_names
from t
group by address, lower(name);

如果您必须处理其他变体,例如中间声母,这将变得更加棘手。如果这是您的问题,请使用适当的样本数据提出一个问题,并明确解释如何识别两个名称是否“相似”。


推荐阅读