检查同一MySQL表中的重复
我有上面的样品表。我想创建一个mysql查询来检查“icnum”的重复,一个摘要/计数和一个重复列表。什么 我想要的是: 在地区“20”中找到了地区“10”中的多少个“icnum”。检查同一MySQL表中的重复,mysql,sql,Mysql,Sql,我有上面的样品表。我想创建一个mysql查询来检查“icnum”的重复,一个摘要/计数和一个重复列表。什么 我想要的是: 在地区“20”中找到了地区“10”中的多少个“icnum”。 在区域“30”中找到了区域“10”中的多少个“icnum”。 在地区“30”中找到了地区“20”中的多少个“icnum” 我尝试了在stackoverflow中找到的几个查询,但它没有给出我想要的结果。我是复杂sql查询的新手 因此,我应该为每个地区分别执行查询以获得结果。请在stackoverflow中掌握MyS
在区域“30”中找到了区域“10”中的多少个“icnum”。
在地区“30”中找到了地区“20”中的多少个“icnum” 我尝试了在stackoverflow中找到的几个查询,但它没有给出我想要的结果。我是复杂sql查询的新手 因此,我应该为每个地区分别执行查询以获得结果。请在stackoverflow中掌握MySQL,帮我解决这个问题。Tq 下面是我想要的示例输出:
id district icnum
1 10 111
2 10 112
3 10 113
4 10 114
5 10 111
6 20 115
7 20 116
8 20 117
9 20 111
10 20 111
11 30 118
12 30 119
13 30 111
14 30 111
15 30 120
可以使用自联接来执行此操作:
district district count(*)
10 20 2
10 30 2
20 30 2
选择t1.district、t2.district、count(不同的t1.icnum)
从t1连接
t2
在t1.icnum=t2.icnum和t1.district
注:
- 如果没有重复项,请使用
而不是count(*)
count(*)
- 这将不会返回没有共同点的对(尽管这是可以修复的)
原始答案说,如果您有重复项,则使用count(distinct)
。因为你知道,所以我做了第一个答案。我在我的实际表上使用这个查询,这个表大约有250万行。我执行了这个查询,差不多15分钟了,查询还在运行。这正常吗?@Shahril。这取决于你们的选区有多大。您可能会有一些地区有大量的icnum,您可能希望将其过滤掉。
select t1.district, t2.district, count(distinct t1.icnum)
from t t1 join
t t2
on t1.icnum = t2.icnum and t1.district < t2.district
group by t1.district, t2.district;