このような列を持つテーブルがあります。
サイト、染色体、ストランド。
サイトと染色体のペアは、複数の鎖を持つことができますが、一意でなければなりません。データをロードする前に、一部のサイトに複数の染色体があることがわかりました。これは明らかにエラーです。私は、複数の染色体を持つサイトであるエラーを特定しようとしていました。私はそれについて考えましたが、適切なSQLを思い付くことができませんでした。そこで、問題を分割しました。最初に、個別のレコードを選択するテーブルを作成します。
create table distinct_pair
as select distinct site, chromosome
from original_table;
次に、これにより複数の染色体を持つサイトを見つけることができました。
select site
from distinct_pair
group by site
having count(site)>1;
うまくいきました。次に、元のテーブルからエラーのすべての情報を確認しようとして、これを行いました。
select * from original_table
where site
in (select name from distinct_pair
group by site
having count(site)>1);
次に、列がすべてインデックス化されていても、このサブクエリは遅すぎました。
クエリを結合として書き直そうとしましたが、持っていると難しくなります。私を助けてください。
===================
この質問に答えてくれた皆さん、ありがとう。私のデータは次のようになります。
Site | Chromosome | Strand
N111 | 2L | +
N111 | 2L | -
N112 | 2L | +
N112 | 2L | -
N112 | 3L | +
N112 | 3L | -
....
この場合、N111 は問題ありませんが、N112 は染色体データが 2 つあるためエラーです。2番目の回答のサブクエリは、ストランドのためにN111とN112を選択しましたが、これは私が抱えていたのと同じ問題でした。複数の列を持つ関数によるグループ化は、私が推測したものとは異なりました。ただし、提案された回答は、group by がどのように機能するかの手がかりを与えてくれたので、少し変更して機能させることができました。2 つの答えは同じ結果になります。改めまして、ありがとうございます。
サイト