我正在用python编写一个简单的测验游戏,我需要在游戏结束时打印出前5个得分。我正在使用sqlite。我有一张得分最高的表格,并且我已经计算出如何获得得分最高的表格,但是因为我只需要得分最高的5位,所以我想删除得分低于得分最高5位的所有记录。语句,还是我需要用python编写它。
谢谢
答案 0 :(得分:4)
这里是一种选择:
DELETE
FROM yourTable
WHERE score NOT IN (SELECT DISTINCT score
FROM yourTable
ORDER BY score DESC LIMIT 5);
此答案对于在前5名中保持平局很稳健,但会返回5条以上的记录,而所有记录均在前5名中得分。
如果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
。
答案 1 :(得分:1)
我对子查询强烈反对NOT IN
,因为如果score
值的 any 为负,它的行为就不会达到预期。所以我建议:
DELETE FROM t
WHERE score < (SELECT DISTINCT t2.score
FROM t2
ORDER BY t2.score DESC
LIMIT 1 OFFSET 4
);