2017-08-04 103 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;