SQL ВЫБОР Базы данных - PullRequest
       45

SQL ВЫБОР Базы данных

0 голосов
/ 20 января 2011

Нужна помощь с домашним заданием по SQL

Задача

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

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

У меня есть таблица с именем Games, которая содержит информацию ...

  • идентификатор игры
  • идентификатор турнира
  • start_time
  • end_time
  • white_pieces_player_id
  • black_pieces_player_id
  • white_result
  • black_result

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

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

... а имена и фамилии игроков хранятся в таблице с именем People ....

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

... как сделать оператор SELECT в SQL, который бы дал мне ответ?

Ответы [ 2 ]

1 голос
/ 20 января 2011

звучит так, как будто вам нужно ограничить по tourID в предложении where, объединить с таблицей людей в 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 голосов
/ 20 января 2011

Я бы агрегировал объединение этой таблицы в производную таблицу следующим образом:

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

...