10 лучших бомбардиров по сезону

0

Как я могу получить 10 лучших игроков по сезонам.

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

Я пробовал левое соединение в таблицу, но он сломался, показывая 2 игрока и подсчитывает все цели перед первым игроком.

Мой sqlfiddle: http://sqlfiddle.com/#!9/b5d0a78/1

Теги:

2 ответа

0

Я думаю, что запрос, который вы хотите, выглядит так:

SELECT p.*, count(*) as num_goals
FROM match_goals g INNER JOIN 
     match_players p
     ON g.match_player_id = p.id INNER JOIN
     matches m
     ON m.id = p.match_id
WHERE p.is_deleted = 0 AND 
      g.is_own_goal = 0 AND
      m.seasion_id = <last season id>
GROUP BY p.id
ORDER BY num_goals DESC
LIMIT 10;

Обратите внимание, что таблица команд не требуется. SELECT p.* Разрешен, поскольку p.id (ключ GROUP BY) уникален.

  • 0
    Но я думаю, что он нуждается в этом, но в сезон.
0

Вы получили это почти правильно.

Вы хотите сгруппировать match_goals по ID игрока (match_player_id), но тогда вы не должны выбирать goal_minute или любые другие данные цели.

После группировки игроком вы можете создать столбец для COUNT(match_player_id) это даст вам количество целей, вы также можете использовать этот столбец для заказа результатов.

Думаю, ваши стычки и условия верны.


РЕДАКТИРОВАТЬ

Я думаю, что ваша схема нуждается в нескольких настройках: проверьте это http://sqlfiddle.com/#!9/f5a75b/2

В основном создайте прямые отношения в match_players и match_goals с другими таблицами.

  • 0
    Но, как я оставил присоединиться к сезонам по идентификатору и получить цели сезона ...
  • 0
    Вы не пропустили отношения между match_goals и matches ?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню