我有一张包含数千条记录的表格:
+-----+-------+------+----------+
| 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多个不同名称的列。
答案 0 :(得分:1)
你可以做第一个:
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保留字。
答案 1 :(得分:1)
尝试此操作仅返回具有相似性的行:
SELECT group, code, [column3], [column4], ..., [column20]
FROM table
GROUP BY group, code, [column3], [column4], ..., [column20]
HAVING count(1) > 1
您必须将[columnX]替换为要检查相似性的列名。
答案 2 :(得分:1)
这将为您提供表中的重复行,其中包含时间发生次数
SELECT [group], [code] , COUNT(1) as CNT
FROM YourTableName
GROUP BY [group], [code]
HAVING COUNT(1) > 1
ORDER BY CNT;