如何从表中删除除前5个

时间:2018-12-12 10:38:19

标签: python sql sqlite

我正在用python编写一个简单的测验游戏,我需要在游戏结束时打印出前5个得分。我正在使用sqlite。我有一张得分最高的表格,并且我已经计算出如何获得得分最高的表格,但是因为我只需要得分最高的5位,所以我想删除得分低于得分最高5位的所有记录。语句,还是我需要用python编写它。

谢谢

2 个答案:

答案 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
               );