2017-08-04 65 views
0

聚合多个列我有一组在下面的格式MySQL的数据:困难过滤和在MySQL

acode  bcode unique_code 
BA1100018 SE  OX120013 
BE1100001 CS  CS140005 
BE1100001 SE  SE140079 
CS1400000 CS  CS140006 
CS1400000 CS  CS140011 
CS1400000 CS  CS140009 
CS1400000 CS  CS140013 
OX1100021 OX  OX110010 
OX1100021 SE  OX110013 
OX1100021 OX  OX980141 

我试图确定哪些ACODE的ID有不止一个不同BCODE ID。我想返回一组将相关数据过滤掉的数据。

acode  bcode unique_code 
BE1100001 CS  CS140005 
BE1100001 SE  SE140079 
OX1100021 OX  OX110010 
OX1100021 SE  OX110013 
OX1100021 OX  OX980141 

我最初的尝试是:在这种情况下,如下所示的数据将返回

select count(bcode),acode from mydataset group by acode having 
count(bcode)>1 

我意识到,这是不会回到我的bcodes,所以我尝试的各种排列那。没有太多的成功。我一直试图尽可能有效地完成这项工作,因为我正在处理大型数据集,但是我在保持所需的细节的同时遇到了聚合技术方面的困难。有人能帮助吗?由于

+0

为什么{CS1400000,CS,CS140006}不符合你的预期结果如何? – JeffUK

+0

Hi @JeffUK。它们不在结果中,因为只有一个bcode。 – Chaz

回答

0

的那些这将工作为你

SELECT main.bcode, main.acode FROM mydataset main 
INNER JOIN (SELECT acode, count(DISTINCT bcode) AS cnt FROM mydataset GROUP BY acode HAVING cnt>1) AS sub 
ON main.acode=sub.acode 
+0

谢谢@rahul verma。您的方法只返回unique_codes CS140005,SE140079,OX110010,OX110013(用于acode BE1100001和OX1100021)。似乎混淆了办公室代码。但是,它会过滤掉那些只有一个办公室代码的记录,这是更重要的(其他答案不这样做)。 – Chaz

0

,如果你告诉我们你尝试过它的更好......

SELECT acode,bcode,count(bcode) 
FROM mydataset 
GROUP BY acode,bcode 

,如果你想只具有超过1

SELECT acode,bcode,count(bcode) as num 
FROM mydataset 
GROUP BY acode,bcode 
HAVING num>1 
0
SELECT DISTINCT x.* 
      FROM my_table x 
      JOIN my_table y 
      ON y.acode = x.acode 
      AND y.bcode <> x.bcode;