我有一张赛事记录表,其中保留了比赛记录。当某人完成比赛时,无论结束时间或位置是什么,记录都会被插入到桌子中。我想获得前5名最佳赛手,而不是前5名最佳赛手。
请帮我解决SQL查询问题。顺便说一句,列是id,holder,rec_time,time,position
答案 0 :(得分:0)
<强>被修改强>
根据新信息,我可以尝试另一种方法:
首先,您需要知道每个持有人的最佳时间:
SELECT id, holder, min(race_time) FROM race_time GROUP BY holder;
因为你只需要前五名,所以我们就把这个约束:
SELECT id, holder, min(race_time) FROM race_time GROUP BY holder ORDER BY min(race_time) ASC, time ASC LIMIT 5
一旦你有了这个,你只需要 id 字段,所以:
SELECT id FROM race_time GROUP BY holder ORDER BY min(race_time) ASC, time ASC LIMIT 5;
最后,您可以获得每一栏:
SELECT * FROM race_time WHERE id IN (SELECT id FROM race_time GROUP BY holder ORDER BY min(race_time) ASC, time ASC LIMIT 5);
根据您为最佳持有人提供的(更新)定义,这应该为您提供前5个不同的持有者。
<强>之前强>
我在这里留下了之前的答案,因为如果没有它,评论将是胡说八道
假设比赛是表名,而位置在比赛中第一名是1,第二名是2,等等,这里有。
SELECT * FROM race ORDER BY position LIMIT 5;
这是一个非常基本的查询,您应该去做一些SQL tutorial
答案 1 :(得分:0)
你没有说明赛车手何时是最好的&#39;。当您将其定义为具有最佳平均位置的赛车时,您的查询将变为:
SELECT holder, AVG(position) AS average_position
FROM race
GROUP BY holder
ORDER BY AVG(position) ASC
LIMIT 5