【发布时间】:2013-11-18 04:31:46
【问题描述】:
我有一个类似于this question 的问题,但有点复杂,我无法弄清楚如何有效地解决问题。给定两张表,一张是运动员列表,一张是他们参加过的比赛列表,例如,
运动员
- 身份证
- 姓名
- 性别
- 详情
比赛
- athlete_id
- 年
- 点
我想只使用他们的前 4 名比赛成绩(其中“顶级”由分数定义),按性别对给定年份的所有运动员进行排名。我觉得我应该能够在子查询中执行此操作,但我不知道如何从内部引用外部查询。我现在的样子是这样的:
SELECT SUM(points) as points, a.* FROM
(SELECT rr.points, inner_a.id as athlete_id
FROM athletes_raceresult rr
INNER JOIN athletes_athlete inner_a ON rr.athlete_id = inner_a.id
WHERE inner_a.gender ='m' AND rr.year BETWEEN 2012 AND 2014
AND inner_a.id = a.id
ORDER BY rr.points DESC) as races
INNER JOIN athletes_athlete a ON races.athlete_id = a.id
GROUP BY races.athlete_id
ORDER BY points DESC
但这并不会将分数限制为每位运动员 4 行。看起来我想要一个correlated subquery,但我无法让它工作。
【问题讨论】:
-
您是否希望显示每位运动员在他们完成的前 4 名中的每个点的分数?
-
不,只是总和。
-
“前 4 名比赛结束”在哪里适合您的查询?
-
你能在sqlfiddle.com提供一些示例数据吗?
标签: mysql sql join subquery correlated-subquery