2016-09-27 15 views
3

各行の要素の頻度を計算しようとしています。説明します: "pos、chr、ref、alt、id_disease"などの要素を含む表から選択します。 。各行の頻度を計算する

num_occurrencies_of(ref='A' and alt='C')/total number of rows:ある

私は私のREFの周波数を抽出する必要がありますこれらのことから

、ALT。実際にはidが正しく、それは常にa constant

SELECT pos, chr, upper(ref||' '||alt) AS refalt, id_disease AS lvl15, t1.tot_var, t1.freq 
FROM varianti 
JOIN (SELECT count(*) AS tot_var,(count(*)::numeric/sum(count(*)) over()) as freq 
     FROM varianti)t1 ON TRUE 
WHERE length(ref)=1 AND length(alt)=1 AND chr similar to 'chr[\d X Y]*' 

を返す頻度を計算していない私はやっと私の目標に近づくこのクエリでは

、私が欲しいのは、このようなデータを取得することです:

chr pos refalt lvl15 freq tot_var 
1 120 AT  15 0.3 1000 
1 150 CG  30 0.01 1000 

tot_var =私の必要とする行の総数をカウントします(1行に1を数えることはできません)

refとaltの両方に値(A、 AA、AT、TA、TC、CTなどのすべての順列で、T、C、G)を使用できます。

私のコードには何がありませんか?

あなたはさらにに関する情報が必要な場合はvariantiの


例を教えてください:

chr pos ref alt id_disease 
chr1 152 A C 15 
chr3 487 T T 74 

ここでは、私のクエリの出力である:あなたが提供した情報に基づいて

pos   chr refalt lvl15 tot_var freq 
124338543 chr11 G A  69  1  0.000000677833751782702767 
124338595 chr11 C T  28  1  0.000000677833751782702767 
124361862 chr11 C .  53  1  0.000000677833751782702767 
124361899 chr11 T A  20  1  0.000000677833751782702767 
+2

テーブル「varianti」のいくつかの行の例を挙げることができますか? thks – maximilienAndile

+0

ここで、例を使って更新してください。 – xCloudx8

答えて

1

SELECT DISTINCT chr, pos, 
upper(ref||' '||alt) AS refalt, id_disease AS lvl15, 
SUM(CASE WHEN (ref == 'A' AND alt == 'C')THEN 1 ELSE 0 END)/COUNT(*) AS 'freq', 
COUNT(*) AS 'tot_var' 
FROM varianti 

「tot_var」が何であるかまだ分かりません。実際のデータサンプルと、そのデータサンプル自体の期待される出力を得ることは有益であろう。

編集1:データセットに

SELECT DISTINCT upper(ref||' '||alt) AS refalt, 
COUNT(chr)/COUNT(*) AS 'freq' 
FROM varianti 
GROUP BY refalt 

を各カップルの周波数を取得するには、[編集] 2:更新要件

SELECT varianti.chr, varianti.pos, 
upper(varianti.ref||' '||varianti.alt) AS refalt, varianti.id_disease AS lvl15, COUNT(*) AS 'tot_var', 
FROM varianti 
JOIN 
(SELECT DISTINCT upper(ref||' '||alt) AS refalt, 
    COUNT(chr)/COUNT(*) AS 'freq' 
    FROM varianti 
    GROUP BY refalt 
) refalt_table ON refalt_table.refalt = varianti.refalt 

編集3に基づいてクエリ:エラー

に基づいて更新クエリ
SELECT chr, pos, upper(ref||' '||alt) as refalt, id_disease AS lvl15, refalt_table.freq as 'freq', (SELECT COUNT(*) FROM varianti tot where tot.pos = v.pos) as 'tot_var' 
FROM varianti v 
LEFT JOIN 
(SELECT DISTINCT UPPER(ref) as 'ref',UPPER(alt) as 'alt', 
    COUNT(pos)/(SELECT COUNT(*) FROM varianti vcount) AS 'freq' 
    FROM varianti 
    GROUP BY ref,alt 
) refalt_table ON refalt_table.ref = v.ref and refalt_table.alt = v.alt 
+0

それは大丈夫ですが、どのように私は各カップルのための周波数を得ることができますか? – xCloudx8

+0

ええ、私はあなたが提供したSQLクエリ以外の入力データサンプルがどのようにクエリされているのか分かりません。入力サンプルとクエリデータサンプルの出力を得ることができれば幸いです。 – woodhead92

+1

@ xCloudx8周波数を取得するためのソリューションを編集しました。 – woodhead92

関連する問題