Sql 在表格中找到相似之处

Sql 在表格中找到相似之处,sql,database,similarity,Sql,Database,Similarity,我有一个包含数千条记录的表: +-----+-------+------+----------+ | id | group | code | label | +-----+-------+------+----------+ | 1 | abc | 345 | myLabel1 | | 2 | abc | 345 | myLabel4 | | 3 | def | 987 | myLabel2 | | 4 | def | 345 | myLabel4

我有一个包含数千条记录的表:

+-----+-------+------+----------+
| id  | group | code |  label   |
+-----+-------+------+----------+
| 1   | abc   | 345  | myLabel1 |
| 2   | abc   | 345  | myLabel4 |
| 3   | def   | 987  | myLabel2 |
| 4   | def   | 345  | myLabel4 |
| 5   | def   | 987  | myLabel2 |
| 6   | def   | 231  | myLabel1 |
| 7   | def   | 231  | myLabel9 |
| 8   | abc   | 345  | myLabel3 |
| 9   | def   | 987  | myLabel2 |
| 10  | def   | 345  | myLabel1 |
| ... | ...   | ...  | ...      |
+-----+-------+------+----------+
在此表中,一些条目彼此相似

例如1、2和8:
group
是“abc”,而
code
是“345”。
另一个例子是条目3、5和9:
group
是“def”;
code
是“987”;
label
是“myLabel2”

人们可以正式地说:

IF group = "abc", THEN code = "345"
IF group = "def" AND code = "987", THEN label = "myLabel2 "
我想在我的表格上运行一个程序,找出这些相似之处


PS:此表只是一个示例。它实际上有20多列不同的名称。

您可以按以下方式执行第一个操作:

select group, min(code) as implied_code
from records 
group by group
having count(distinct code) = 1;
第二个是:

select group, code, min(label) as implied_label
from records 
group by group, code
having count(distinct label) = 1;

注意:
group
对于列来说是一个非常糟糕的名称,因为它是SQL保留字。

请尝试仅返回具有相似性的行:

SELECT group, code, [column3], [column4], ..., [column20]
FROM table 
GROUP BY group, code, [column3], [column4], ..., [column20]
HAVING count(1) > 1

您必须将[columnX]替换为要检查相似性的列名。

这将在表中为您提供重复的行以及出现的时间数

SELECT      [group], [code] , COUNT(1) as CNT
FROM        YourTableName
GROUP BY    [group], [code] 
HAVING      COUNT(1) > 1
ORDER BY CNT;

您正在查找关联规则。虽然您可以在SQL中执行此操作,但我可能首先建议您使用直接支持它们的工具。实际上,语言或格式并不重要。我可以导出和转换其中任何一个表中的表。你能给我推荐一个免费的(简单的)工具吗?你可以试试ApacheLucene。但这远不简单。您必须研究它,并选择适当的方法进行相似性搜索:我提供的表只是一个示例。它实际上有20多列不同的名称。@user1170330。您可以在SQL中创建关联规则。这就是我写“使用SQL和Excel进行数据分析”的原因之一。我通常不会将Stack Overflow用作提及我的书籍的论坛,但会专门用一章来介绍这一主题。在这种情况下,我缺少了“def 987”,它出现了3次。编辑:如果必须检查其他列的相似性,则必须按条件将它们添加到group by condition中。