在 SQL 表中查找所有相似的行

Posted

技术标签:

【中文标题】在 SQL 表中查找所有相似的行【英文标题】:Finding all similar rows in SQL Table 【发布时间】:2013-03-25 22:01:01 【问题描述】:

我需要编写查询来查找列描述中具有相同或相似重复项的所有项目。

我当前的查询会找到所有完全相同的值,但它必须包含相似的值;例如 SQL Sql 和 sql。

SELECT 
    Description, COUNT(*) AS Count_Of    
FROM
    Source 
GROUP BY
    [Description]  
HAVING 
    COUNT(*) > 1   

我知道如何使用 LIKE 在表中搜索与我定义的内容相似的所有项目,我可以将它应用于这个问题吗?

非常感谢任何和所有帮助,谢谢。

--2013 年 3 月 26 日编辑

当我说类似时,我的意思不仅仅是区分大小写。我正在使用公司名称,并且必须考虑使用不同名称的人,例如 Monsters Inc 和 Monsters Incorporated。

我还希望输出显示描述是什么,以便我知道哪些公司在数据库中有冗余。

从那以后,我已经注意区分大小写了

SELECT
    LOWER (Description), COUNT(*)AS Count_Of

已解决

我有一个查询可以找到所有重复的确切内容,我还有一个查询可以找到我指定的项目的所有类似项目。

我解决它的方法是运行第一个查询并将所有重复的项目存储在一个表中,然后修改第二个查询,以便在运行时它会在我刚刚创建的表中的每个项目的位置找到所有相似的项目.

非常感谢所有提供帮助的人

【问题讨论】:

这可能会有所帮助:***.com/questions/3299330/… 如果您定义“相似”的含义会有所帮助。您的示例(SQL、Sql、sql)可以通过不区分大小写的搜索来解决,但这可能不是您真正的意思。 【参考方案1】:

如果您只想进行不区分大小写的比较,那么只需在 GROUP BY 子句中指定适当的不区分大小写的排序规则即可。

例如,您可以使用以下内容:

SELECT 
    Description COLLATE SQL_Latin1_General_CP1_CI_AS,
    COUNT(*) AS Count_Of    
FROM
    Source 
GROUP BY
    [Description] COLLATE SQL_Latin1_General_CP1_CI_AS
HAVING 
    COUNT(*) > 1 

【讨论】:

感谢您让我知道这一点,我使用 LOWER 只会破坏案例,而您的方法可以保留它【参考方案2】:

根据“相似”的含义,您会发现 SOUNDEX 很有用:

http://www.techonthenet.com/oracle/functions/soundex.php

如果不是,类似是什么意思?

【讨论】:

SOUNDEX 似乎很有趣。虽然这次我没有使用它,但将来我将不得不使用它。谢谢你告诉我这件事【参考方案3】:

您可以使用 Group By + CASE WHEN 对相似的值进行分组,但需要做一些繁琐的工作,例如:


 SELECT 
    CASE WHEN DESCRIPTION LIKE '%ONE%' THEN 'LIKEONE'
         WHEN DESCRIPTION LIKE '%TWO%' THEN 'LIKETWO'
         ELSE 'LIKEOTHER'END , COUNT(*) AS Count_Of    
FROM
    Source 
GROUP BY
    CASE WHEN DESCRIPTION LIKE '%ONE%' THEN 'LIKEONE'
         WHEN DESCRIPTION LIKE '%TWO%' THEN 'LIKETWO'
         ELSE 'LIKEOTHER'END 
HAVING 
    COUNT(*) > 1 

【讨论】:

以上是关于在 SQL 表中查找所有相似的行的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中具有相似ID的行的列乘法总和

可以使用 Google Prediction API 从 bigquery 表中检索相似的行吗?

在表中查找相似的数字模式

有没有办法根据 Python 中的一列或多列中具有相似值的行来选择表中的某些行?

有没有一种方法可以根据不完全相同的值在 SQL 中组合相似的行?

如何使用Excel查找大量相似数据?