1

頭を包むのが難しいという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

どんな考えでも大歓迎です!など、詳しい情報があれば教えてください。

4

2 に答える 2

2

に他の列名を追加するだけですCOUNT(DISTINCT...

COUNT(DISTINCT s_id, allele) AS ALLELECOUNT

と の一意の組み合わせをカウントしs_idますallele

于 2012-07-29T18:16:00.893 に答える
0

これにより、catalog_id 内で対立遺伝子が診断的である一致の完全な記録が得られます。

select good.*
from matches good
  left join matches dq on
    dq.catalog_id = good.catalog_id and
    dq.allele = good.allele and
    dq.sample_id != good.sample_id
where dq.catalog_id is null

ここから、一時テーブルにダンプし、既に説明したのと同様の手法を使用して簡単に要約できるはずです。一時テーブルをスキップして、必要に応じて要約に直接進むこともできます。

カタログごとに複数のサンプルで対立遺伝子が見つかった行のみを除外します。同じカタログ内の同じサンプルに対して同じ対立遺伝子が見つかった場合でも、その行が返されます。(カタログごとに 1 つのサンプルではなく) カタログごとに 1 つの RECORD に対してのみ対立遺伝子が見つかるものを選択する場合は、dq.sample_id != good.sample_id を dq.id != good.id に変更します。

于 2012-11-16T18:56:48.437 に答える