Python 如何从表中删除除前5项以外的所有记录
我正在用python编写一个简单的问答游戏,我需要在游戏结束时打印出前5名的分数。我正在使用sqlite。我有一个关于最高分数的表格,我已经计算出如何获得最高分数,但因为我只需要前5名的分数,我想删除所有分数低于前5名的记录。这可以通过SQL语句实现,还是需要用python编写 谢谢这里有一个选项:Python 如何从表中删除除前5项以外的所有记录,python,sql,sqlite,Python,Sql,Sqlite,我正在用python编写一个简单的问答游戏,我需要在游戏结束时打印出前5名的分数。我正在使用sqlite。我有一个关于最高分数的表格,我已经计算出如何获得最高分数,但因为我只需要前5名的分数,我想删除所有分数低于前5名的记录。这可以通过SQL语句实现,还是需要用python编写 谢谢这里有一个选项: DELETE FROM yourTable WHERE score NOT IN (SELECT DISTINCT score FROM yourTable
DELETE
FROM yourTable
WHERE score NOT IN (SELECT DISTINCT score
FROM yourTable
ORDER BY score DESC LIMIT 5);
这个答案对于前5名的平局来说是可靠的,但可能会返回5条以上的记录,所有这些记录的总分都在前5名
如果行号可用,我们可以尝试以下方法:
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);
同样,还有如何处理关系的问题。实际上,您可能希望使用密集秩而不是行数。我强烈反对不使用子查询,因为如果任何分数值为负数,它的行为就不会像预期的那样。因此,我建议:
DELETE FROM t
WHERE score < (SELECT DISTINCT t2.score
FROM t2
ORDER BY t2.score DESC
LIMIT 1 OFFSET 4
);
前五名中会有两个或两个以上的分数恰好持平吗?这里你真正想用的是行号,但这在SQLite AFAIK中并不存在。@TimBiegeleisen您可以通过左键将表连接到score