2011-01-19 2 views
0

Нужна помощь с домашнее задание на SQLбазы данных SQL SELECT, вопрос

Проблема

узнать, кто (фамилия, имя и фамилию) играл большинство игр в шахматном турнире с ID = 41

Справочная информация

Я получил таблицу с именем Games, который содержит информацию ...

  • ID игры
  • ID турнира
  • start_time
  • END_TIME
  • white_pieces_player_id
  • black_pieces_player_id
  • white_result
  • black_result

... обо всех отдельных шахматных игр, которые имели место в трех различных турнирах ....

(турниры, имеющие идентификаторы из 41,42 и 47)

... и первый и последний имена игроков хранятся в таблице под названием People ....

  • человек ID (тот же идентификатор, который появляется в таблице «игры», как white_pieces_player_id и black_pieces_player_id)
  • first_name
  • last_name

... как сделать инструкцию SELECT в SQL, которая даст мне ответ?

+2

, что интерактивный SQL? – Beth

+0

На самом деле это неважно - это Sybase Central thingy .... 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

@ Бет, это не ответ, пока он не примет его: D – Matthew

1

звучит так, как вам нужно ограничить турниристомID в своем предложении where, присоединиться к таблице people на white_pieces_player_id и black_pieces_player_id и использовать функцию max на счету white_result = win union black_result = win.

интересная проблема. Что у вас есть?

хмм ... в ответ на ваш комментарий

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, я говорю только по-американски. На каком языке находится этот код?

+0

+1, но он не спрашивает о победах ... Просто 'JOIN' две копии таблицы« GAMES », как вы сказали на обеих колонках , затем 'CNT (*)', и вы можете легко найти, кто больше всего играл. – Matthew

+0

ах, ты прав. предположил, что они захотят больше всего побеждать. дело в том, что идентификатор игрока может быть черным или белым, поэтому ему понадобится союз – Beth

+0

Не совсем. Если вы присоединитесь к таблице персональных данных к таблицам игр для personID, она должна создать повторяющиеся строки для каждой записи в таблице игр. – Matthew

Смежные вопросы