在 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 表中查找所有相似的行的主要内容,如果未能解决你的问题,请参考以下文章
可以使用 Google Prediction API 从 bigquery 表中检索相似的行吗?
有没有办法根据 Python 中的一列或多列中具有相似值的行来选择表中的某些行?