我有一个保存比赛记录的racerrecords表。当有人完成比赛时,无论终点时间或位置是什么,记录都被插入到表中。我想要前5名最好的车手,而不是前5名最好的成绩。
请帮助我与sql查询。列是id, holder, rec_time, time, position
你没有说明什么时候车手是"最好的"。当您将其定义为具有最佳平均位置的赛车时,您的查询将变成:
SELECT holder, AVG(position) AS average_position
FROM race
GROUP BY holder
ORDER BY AVG(position) ASC
LIMIT 5
编辑
有了新的信息,我有另一种方法,你可以试试:
-
首先你需要知道每个持有人的最佳时间:
SELECT id, holder, min(race_time) FROM race_time GROUP BY holder;
-
因为你只需要前5个,所以我们添加约束:
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名不同的持有者。
前我把前面的答案留在这里,因为没有它注释将是无意义的
假设race是表名,position为1,表示第一名,2表示第二名,以此类推。
SELECT * FROM race ORDER BY position LIMIT 5;
这是一个非常基本的查询,你应该去学习一些SQL教程