2011-11-14 10 views
0

私はまだSQLの基礎を掴んでいます。どんな助けでも大歓迎です。SQLクエリの支援をお願いします

テーブルはTeamRankingsです。列は次のとおりです。

score | qualities_id | team_id | year | source_id 

チームは、特定の年の異なる資質に関して採点されます。所与のチームに複数のスコアを割り当てることができることに留意されたい(それぞれが異なるソースからのものである)。同様に、所与のチームは与えられた年の間に全くスコアを持たないかもしれない。ここで

が問題だ:単一の品質、チームのリスト、および年のリストを考えると

、私は各チーム/年の単一のスコアを見つけたいです。与えられたチーム/年に複数の情報源から利用可能な得点がある場合、私は最も低いsource_idで得点を選んでいきたいと思います。

これを行う方法はGROUP BY team_id、year、quality_idになっていると思いますが、何らかの方法で上位のソースIDを除外します。しかし、私はそのフィルタリングがどこで起こるのか混乱しています。 HAVING句、またはWHERE句にはありません。サブクエリが必要ですか?

答えて

3

あなたがテーブルのグループ化されたバージョンに参加することができます:

select t.* from TeamRankings t 
inner join (select team_id, year, min(source_id) as minSource 
      from TeamRankings group by team_id, year) f 
on t.team_id = f.team_id AND t.year = f.year AND t.source_id = f.minSource 
0
SELECT score, team_id, year, min(source_id) 
FROM TeamRankings 
GROUP BY score, team_id, year 
WHERE qualities_id=1 
関連する問題