2017-10-14 32 views
-1
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 

我有上面的示例表。我想创建一个mysql查询来检查'icnum'的重复,摘要/计数以及重复列表。什么检查同一MySQL表中的重复

我想要的是:

多少 'icnum' 小区内 '10' 在区 '20' 被发现。
区域'10'内有多少'icnum'被发现在'30'区域。
区'20'内有多少'icnum'被发现在'30'区。

我试过了几个在stackoverflow中找到的查询,但它并没有给我我想要的结果。我是一个复杂的SQL查询中的新手。

所以我应该分别为每个分区执行查询来获得结果。请掌握MySQL中的stackoverflow,帮助我。 TQ。

下面是我想要的输出示例:

district district count(*) 
    10   20   2 
    10   30   2 
    20   30   2 
+2

这不是一个复杂的查询。请参阅[为什么我应该提供一个用于我认为是非常简单的SQL查询的MCVE](http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-看起来对我来说是一个非常简单的sql查询) – Strawberry

+0

huhu,那么我想我是一个总nobbs ... – Shahril

回答

0

您可以使用一个做到这一点自联接:

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; 

注:

  • 如果你不这样做重复,然后使用count(*)而不是count(*)
  • 这不会返回没有任何共同点的对(尽管这可能是固定的)。
+0

好吧,让我试试... – Shahril

+0

使用我的示例数据,这与我在这里发表的相同,结果似乎翻了一番,意思是在第20区的10区icnum重复了一次,但是它显示了2区,在第30区的区域20的icnum重复了3次,但显示了6次..我想这是因为<运营商.. – Shahril

+0

@ Shahril。 。 。否。''应该将返回的行数减少2倍。它不应该加倍。 –