Подзапрос MYSQL должен возвращать несколько строк с LIMIT 5 за результат из родительского запроса

У меня есть три таблицы для моей базы данных NFL

Игроки, у которых есть идентификатор/имя игрока

stats_passing - у которого есть id игрока, game_id, ярды и приземления по игре

Игра - у которой есть дата игры

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

У меня это до сих пор:

SELECT p.name, SUM(s.yds) AS tot_yds, SUM(s.tds) AS tot_tds
FROM players AS p
INNER JOIN ( SELECT s.id, s.player_id, s.yds, s.tds FROM stats_passing AS s INNER JOIN games AS g ON s.game_id = g.id WHERE YEAR(g.date) = 2014 ORDER BY s.player_id, g.date DESC LIMIT 5) AS s ON p.id = s.player_id
ORDER BY tot_yds DESC, tot_tds DESC
LIMIT 4

Однако он возвращает только один результат.

Drew Brees, 1497, 10

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

Drew Brees, 1497, 10
Tom Brady, 1234, 9
Andrew Luck, 1123, 8
Aaron Rodgers, 1023, 7

Я работаю над этим в течение нескольких дней, и я думаю, что мои знания mysql находятся в конце. Пожалуйста помоги! Заранее спасибо!

1 ответ

Догадаться. Надеюсь, это помогает кому-то другому. Не стесняйтесь добавлять к нему, если он неэффективен.

SET @rn = 0;
SET @prev = 0;
SELECT name, tot_yds, tot_tds
FROM ( SELECT p.name, SUM(s.yds) AS tot_yds, SUM(s.tds) AS tot_tds FROM players AS p INNER JOIN ( SELECT s.id, s.player_id, s.yds, s.tds, @rn := CASE WHEN @prev = s.player_id THEN @rn + 1 ELSE 1 END AS rn, @prev := s.player_id FROM (SELECT st.id, st.player_id, st.yds, st.tds FROM stats_passing AS st INNER JOIN games AS g ON st.game_id = g.id WHERE YEAR(g.date) = 2014 ORDER BY st.player_id, g.date DESC) AS s ) AS s ON p.id = s.player_id WHERE rn <= 5 GROUP BY p.name) AS ns ORDER BY tot_yds DESC, tot_tds DESC LIMIT 4

licensed under cc by-sa 3.0 with attribution.