頭を包むのが難しいというmysqlの「問題」があります。
データベースからの文字列のテーブル(実際には遺伝子型ですが、関連する必要はありません)があり、1〜3個のサンプルに存在する可能性があります。各カタログ ID (c_id) の各サンプル (s_id) の一意の対立遺伝子の数を数えたいと思います。たとえば、次の表が与えられます。
id batch_id catalog_id sample_id tag_id allele depth
309 1 324 1 323 TCGC 244
1449616 1 324 2 7961 TCGC 192
2738325 1 324 2 1168472 CCGG 31
3521555 1 324 3 221716 TAAC 29
これまでのところ、次のコードを作成できました。
CREATE TABLE danumbers2
SELECT catalog_id,
count(case when sample_id = '1' and allele != 'consensus' then sample_id end) as SAMPLE1,
count(case when sample_id = '2' and allele != 'consensus' then sample_id end) as SAMPLE2,
count(case when sample_id = '3' and allele != 'consensus' then sample_id end) as SAMPLE3,
sum(case when sample_id = '1' and allele != 'consensus' then depth end) as DEPTH1,
sum(case when sample_id = '2' and allele != 'consensus' then depth end) as DEPTH2,
sum(case when sample_id = '3' and allele != 'consensus' then depth end) as DEPTH3,
count(distinct allele) AS ALLELECOUNT
from matches as danumbers
group by catalog_id
CREATE TABLE thehitlist_all
SELECT catalog_id,SAMPLE1,SAMPLE2,SAMPLE3,DEPTH1,DEPTH2,DEPTH3,ALLELECOUNT
FROM danumbers
WHERE(SAMPLE1>1 SAMPLE2>1 AND SAMPLE3>1 AND ALLELECOUNT>1 AND DEPTH2>10 AND DEPTH3>10)
これにより、次の結果が得られます。
catalog_id SAMPLE1 SAMPLE2 SAMPLE3 DEPTH1 DEPTH2 DEPTH3 ALLELECOUNT
324 1 2 1 244 223 29 4
結果は基本的に、各サンプルの対立遺伝子の総数の catalog_id ソートされたカウントであり、各カタログ idの異なる対立遺伝子の総数です。私が計算に興味を持っているのは (しかし、理解できないようです!)、サンプル間で共有されていない「固有の」対立遺伝子です。言い換えれば、各カタログ ID で各サンプルの診断用「対立遺伝子」を見つけることです。
したがって、上記のデータの例では、テーブルを次のように表示したいと思います。
catalog_id SAMPLE1 SAMPLE2 SAMPLE3 ALLELECOUNT
324 0 1 1 2
どんな考えでも大歓迎です!など、詳しい情報があれば教えてください。