单列查找类似的值

时间:2017-07-07 20:09:31

标签: sql excel

我在EXCEL / SQL表中有一个列样本数据,如下所示。 想要分组类似的记录。 excel或sql中的解决方案应该没问题。

GOPAL
Ramesh
A.GOPAL
SRINIVAS
Ramesh Reddy
G.SRINVIASA RAO

预期的输出可能会对相似性进行排序

 GOPAL
 A.GOPAL
 Ramesh
 Ramesh Reddy
 SRINIVAS
 G.SRINVIASA RAO

GOPAL  Group1
A.GOPAL Group1
Ramesh Group2
Ramesh Reddy Group2
SRINIVAS Group3
G.SRINVIASA RAO Group3

1 个答案:

答案 0 :(得分:1)

这不是一个评论而是一个完整的答案,但可能会引导你朝着正确的方向前进。

您必须定义一个比较两个字符串的相似性度量,并返回一个量化它们之间相似性的值。例如,请参阅A better similarity ranking algorithm for variable length strings。如何实现在SQL查询中使用它取决于您正在使用的DBMS。您还必须建立此度量标准的阈值,并将其定义为“足够接近”。

然后你可以写一个像这样的SQL查询:

select
    a_val as group,
    b_val as stringval
from
    (
    select
        a_val,
        b_val,
        similarity
    from
        (
        select
            a.stringval as a_val, 
            b.stringval as b_val, 
            sim_metric(a.stringval, b.stringval) as similarity
        from
            stringlist as a,
            stringlist as b
        where
            b.stringval >= a.stringval
        ) as sim
    where
        similarity > similarity_threshold
    ) as grp
order by
    a_val;

其中sim_metric()是您的相似度函数,similarity_threshold是您选择的阈值。每组相似名称中的一个名称用作组名。