查找表格中的相似之处
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;
我有一个 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;