2016-02-29 59 views
0

我有一個數據庫視圖(viewAll)這些列:如何計算字符串的出現在包含MySQL

軌跡,VARCHAR(10)
MismatchDesc,VARCHAR(200)

此表可以看起來像:

Locus MismatchDesc 
HLA-A 435delA;553insG 
HLA-B 665subA;776subA;998delG 
HLA-B 776subA;998delG 
HLA-B 998delG 
HLA-A 553insG 

我需要製作一個視圖與附加列MismatchCount因此,它看起來像:

Locus MismatchDesc MismatchCount 
HLA-A 435delA;553insG 1 
HLA-B 665subA;776subA;998delG 1 
HLA-B 776subA;998delG 1 
HLA-B 998delG 3 
HLA-A 553insG 2 

目前我有:

CREATE VIEW mismatchCount AS SELECT Locus, MismatchDesc, SUM(IF('%'+MismatchDesc+'%',1,0)) AS MismatchCount FROM viewAll GROUP BY MismatchDescGDNA ORDER BY mismatchCount ASC; 

我曾希望這將使用偷偷摸摸的通配符和SUM函數生成我需要的輸出,但它不是,它只是在一個更復雜的方式比產生一個輸出我只是用'計數'。

所以這目前生產輸出:

Locus MismatchDesc MismatchCount 
HLA-A 435delA;553insG 1 
HLA-B 665subA;776subA;998delG 1 
HLA-B 776subA;998delG 1 
HLA-B 998delG 1 
HLA-A 553insG 1 

某處,必須有一個方法來計算每根弦的發生,並且每個實例匹配的字符串?

我不能分開字符串,這是分號分開,因爲我需要統計每個唯一的字符串實例。我希望這是有道理的。

編輯

我不是侷限於我執行查詢,如果有一個更有效,更快捷的方式,請分享的方式,因爲這是處理大量的數據,因此可能很慢。

+0

你如何定義「兩張皮」? –

+0

對不起,回覆遲了,所以SO不允許我評論,因爲代表低。不匹配是一個座標,後面是| del | sub,然後是A | C | T | G +或者是由分號@RickJames分隔的列表。正如問題所解釋的,這些是最多200個字符的VARCHARS。 – CG3

回答

1

您可以使用相關查詢來獲得每個軌跡是這樣的一致次數:

CREATE VIEW mismatchCount AS 
SELECT s.Locus, 
     s.MismatchDesc, 
     (select count(*) from YourTable t 
     WHERE t.MismatchDesc like concat('%',s.mismatchDesc,'%') as MismatchCount 
FROM YourTable s 

或者有加盟:

CREATE VIEW mismatchCount AS 
SELECT s.Locus, 
     s.MismatchDesc, 
     count(case when t.MismatchDesc like concat('%',s.mismatchDesc,'%') then 1 end) as MismatchCount 
FROM YourTable s 
INNER JOIN YourTable t ON(1=1) 
GROUP BY s.locus,s.mismatchDesc 
+0

感謝您的回覆@Yossi,我一直在試圖合併您的查詢,它看起來像我想要的,但它似乎與我的服務器和數據庫非常緩慢/內存密集,所以它尚未經過測試,而我配置內存使用並創建我的數據的子集 – CG3

+0

您還可以通過連接而不是相關查詢來實現此目標。如果您希望解決方案告訴我並且我會更新答案,我會感謝您接受我的回答,如果它幫助你@ CG3 – Yossi

+0

我會接受一次,我知道它是否幫助了我/我可以測試它。聯接是否會減少內存密集型方式來完成此查詢?謝謝@Yossi – CG3

相關問題