2011-01-19 10 views
0

SQLSQLデータベースSELECT質問

の宿題といくつかの助けが必要

問題

者(姓と名)IDとチェスの大会でほとんどのゲームをプレイしていて下さい= 41

背景情報

私は情報が含まれていGamesと呼ばれるテーブルを、持って...

  • ゲームID
  • トーナメントID
  • のstart_time
  • END_TIME
  • がblack_pieces_player_id white_pieces_player_id
  • white_result
  • black_result

...約3つの異なるトーナメントで行われたすべての個別のチェスゲーム....

(大会は41,42および47のIDを持つ)

...と、最初と最後の選手の名前はPeopleと呼ばれる....

  • 者のID(などwhite_pieces_player_idと black_pieces_player_id「Gamesのテーブルで起動します同じID)
  • first_nameの
  • テーブルに格納されています
  • last_name

...私は答えを与えるだろうSQLでSELECT文を作成するには?

+2

何Interactive SQLを選択しますか? – Beth

+0

実際には重要ではありません - それはSybase Centralのものです.... oh nvm –

答えて

0

私はこのような派生テーブルに、そのテーブルに参加集計う:あなたは自分の黒/白のプレーのために、両方のカウントを取得してから参加し、その上で集約されているように、このような

SELECT a.last_name, a.first_name, CNT(b.gamecount) totalcount 
FROM players a 
JOIN (select cnt(*) gamecount, a.playerid 
     FROM games 
     WHERE a.tournamentid = 47 
     AND (white_player_id = a.playerid OR black_player_id = a.playerid) 
     GROUP BY playerid 
    ) b 
ON b.playerid = a.playerid 
GROUP BY last_name, first_name 
ORDER BY totalcount 

何かを。あなただけの一番上にしたい場合は

すると、ちょうどTOP 1

+0

私のポストを編集... –

+1

ちょっと、これは宿題です、あなたは彼に答えを与えるべきではありません! – Beth

+0

@Beth、それは彼がそれを受け入れるまでの答えではありません:D – Matthew

1

where句でtournamentIDで制限し、white_pieces_player_idとblack_pieces_player_idのpeopleテーブルと結合し、white_result = win union black_result = winのカウントにmax関数を使用する必要があるようです。

興味深い問題です。 あなたはこれまで何を持っていますか?

うーん...あなたのコメントへの対応

SELECT isik.eesnimi 
FROM partii JOIN isik ON partii.valge=isik.id 
WHERE turniir='41' 
group by isik.eesnimi 
having count(*)>4 

はあなたにもgroup byに追加する場合は、select句に姓を追加することができます代わりにhaving count(*)> number

max()機能を使用することを検討してください

私はアメリカ人にしか話せません。このコードはどの言語ですか?

+0

+1しかし、彼は勝利について尋ねていません...あなたは両方の列で言ったように、 'GAMES'テーブルの2つのコピー「CNT(*)」を入力すると、最もプレイした人を簡単に見つけることができます。 – Matthew

+0

ああ、そうです。彼らは最も勝利を望んでいたと思った。事は、playerIDは黒か白かもしれないので、彼は組合が必要です。 – Beth

+0

本当はありません。 personIDを使用してpersonテーブルをgamesテーブルに追加すると、gamesテーブルの各エントリに重複した行が作成されます。 – Matthew