Как я могу получить 10 лучших игроков по сезонам.
Таким образом, это показывает 10 лучших бомбардиров прошлого сезона...
Я пробовал левое соединение в таблицу, но он сломался, показывая 2 игрока и подсчитывает все цели перед первым игроком.
Мой sqlfiddle: http://sqlfiddle.com/#!9/b5d0a78/1
Я думаю, что запрос, который вы хотите, выглядит так:
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
) уникален.
Вы получили это почти правильно.
Вы хотите сгруппировать match_goals
по ID игрока (match_player_id
), но тогда вы не должны выбирать goal_minute
или любые другие данные цели.
После группировки игроком вы можете создать столбец для COUNT(match_player_id)
это даст вам количество целей, вы также можете использовать этот столбец для заказа результатов.
Думаю, ваши стычки и условия верны.
Я думаю, что ваша схема нуждается в нескольких настройках: проверьте это http://sqlfiddle.com/#!9/f5a75b/2
В основном создайте прямые отношения в match_players
и match_goals
с другими таблицами.
match_goals
и matches
?