MYSQL子查询需要从父查询返回多行,每个结果最多返回5行
我的NFL数据库有三个表 玩家-其中包含玩家id/姓名 传球统计-包括球员id、比赛id、码数和触地得分 游戏-哪个有游戏日期 我正在努力让前四名球员在过去五场比赛中有最多的码数和触地得分 到目前为止,我有: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_
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