オペロンあたりのサイトの最高のインスタンスを返すクエリを作成しようとしています。基本的に各オペロンは多くのサイトを持つことができますが、各サイトにはスコアがあります。特定のオペロンを複数回 (サイトごとに 1 回) リストするのではなく、最も高いサイトで 1 回だけリストされるように、リターンをフィルター処理したいと考えています。
以下にあるものは正しい結果を返すようですが、かなり遅いので、これを行うより速い方法があるかどうかを確認したかったのです。
これがあまり明確でない場合は申し訳ありませんが、MySQL は私にとってまったく新しい世界であり、賢明な方法で質問を投げかけているかどうかはわかりません。
select `g`.`id` AS `ID`,
`g`.`Name` AS `GENE`,
`o`.`id` AS `OPID`,
`os`.`site` AS `BSID`,
`s`.`Sequence` AS `SITE`,
`s`.`Score` AS `SCORE`
from((((
`METAGENO`.`GENE` `g` )
join `METAGENO`.`OPERON` `o` )
join `METAGENO`.`OPERON_SITE` `os`)
join `METAGENO`.`SITE` `s` )
where(
(`o` .`id` = `g` .`Operon`)
and(`os`.`operon` = `o` .`id` )
and(`s` .`id` = `os`.`site`
and(`s` .`Score` = (select max(`s2`.`Score`)
from(`METAGENO`.`SITE` `s2`)
where(`s2`.`id` = `os`.`site`))))) GROUP BY `o`.`id`