2024-03-28 12:03:17 发布
网友
我正在用python编写一个简单的问答游戏,我需要在游戏结束时打印出前5名的分数。我正在使用sqlite。我有一个表的最高分数,我已经制定了如何获得最高的分数,但因为我只需要前5名的分数,我想删除所有记录的分数低于前5名。这是否可以用SQL语句实现,或者我需要用python编写它。你知道吗
谢谢
这里有一个选项:
DELETE FROM yourTable WHERE score NOT IN (SELECT DISTINCT score FROM yourTable ORDER BY score DESC LIMIT 5);
这个答案对于前5名的平局来说是可靠的,但是会有返回可能超过5条记录的行为,所有这些记录的总得分都在前5名。你知道吗
如果ROW_NUMBER可用,我们可以尝试以下方法:
ROW_NUMBER
WITH cte AS ( SELECT id, score, ROW_NUMBER() OVER (ORDER BY score DESC) rn FROM yourTable ) DELETE FROM yourTable WHERE id IN (SELECT id FROM cte WHERE rn <= 5);
同样,还有一个如何处理关系的问题。实际上,您可能希望使用DENSE_RANK而不是ROW_NUMBER。你知道吗
DENSE_RANK
我对带有子查询的NOT IN有强烈的反感,因为如果score值中的任何为负数,它的行为就不符合预期。所以我建议:
NOT IN
score
DELETE FROM t WHERE score < (SELECT DISTINCT t2.score FROM t2 ORDER BY t2.score DESC LIMIT 1 OFFSET 4 );
这里有一个选项:
这个答案对于前5名的平局来说是可靠的,但是会有返回可能超过5条记录的行为,所有这些记录的总得分都在前5名。你知道吗
如果
ROW_NUMBER
可用,我们可以尝试以下方法:同样,还有一个如何处理关系的问题。实际上,您可能希望使用
DENSE_RANK
而不是ROW_NUMBER
。你知道吗我对带有子查询的
NOT IN
有强烈的反感,因为如果score
值中的任何为负数,它的行为就不符合预期。所以我建议:相关问题 更多 >
编程相关推荐