查找表格中的相似之处

Find similarities in tables

我有一个 table 有几千条记录:

+-----+-------+------+----------+
| 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 |
| ... | ...   | ...  | ...      |
+-----+-------+------+----------+

在此table中,有些条目彼此相似。

例如 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 "

我想在我的 table 上 运行 一个程序来找到那些相似之处。

PS: 这个table只是一个例子。它实际上有 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 保留字。

仅对具有相似之处的 return 行进行尝试:

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

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

这将在 table 中为您提供重复行,出现次数为

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