MYSQL子查询需要从父查询返回多行,每个结果最多返回5行

MYSQL子查询需要从父查询返回多行,每个结果最多返回5行,mysql,subquery,limit,Mysql,Subquery,Limit,我的NFL数据库有三个表 玩家-其中包含玩家id/姓名 传球统计-包括球员id、比赛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_

我的NFL数据库有三个表

玩家-其中包含玩家id/姓名

传球统计-包括球员id、比赛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的了解已经到了尽头。请帮忙!提前谢谢

找到了答案。希望这对其他人有帮助。如果效率不高,可以随意添加

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