2011-01-19 105 views
0

需要一些帮助与SQLSQL数据库中选择问题

的家庭作业

问题

找出谁(名和姓)所发挥的大多数游戏在国际象棋比赛用ID = 41

背景资料

我有一个叫Games表,其中包含的信息...

  • 游戏ID
  • 比赛ID
  • START_TIME
  • END_TIME
  • white_pieces_player_id
  • black_pieces_player_id
  • white_result
  • black_result

...,在三个不同的比赛都发生有关的所有单独的棋牌类游戏....

(比赛为41,42 ID和47)

...和第一个和最后玩家名称存储在一个表中调用People ....

  • 人ID
  • FIRST_NAME(该表中的“游戏”为white_pieces_player_id和 black_pieces_player_id出现相同ID)
  • 姓氏

...如何在SQL中创建一个SELECT语句来给我答案?

+2

什么是Interactive SQL的? – Beth 2011-01-19 21:28:47

+0

这实际上并不重要 - 它是Sybase Central的一个重要内容......哦,nvm – 2011-01-19 21:32:17

回答

0

我会集结联接到该表的派生表是这样的。

然后,如果你只想要最上面的一个,只要选择TOP 1

1

听起来像是你需要tournamentID您的where子句限制,与百姓餐桌上一起和white_pieces_player_id black_pieces_player_id,并使用max函数上white_result的数量=赢得工会black_result =胜利。

有趣的问题。 到目前为止你有什么?

嗯...响应您的评论

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

考虑使用max()功能,而不是having count(*)> number

您可以将姓氏添加到select条款,如果你也把它添加到group by子句

sry,我只会说美国话。这段代码的语言是什么?所以,你得到这两个方面为他们的黑/白玩,然后加入和聚集在该

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 

是这样的:

+0

+1,但他并没有问及获胜情况......只是`JOIN`两个副本的`GAMES`表,就像你在两栏中所说的那样,然后'CNT(*)`,你可以很容易地找到谁玩的最多。 – Matthew 2011-01-19 21:53:59