python - 如何从表中删除除前 5 名之外的所有记录
问题描述
我正在用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
可用,我们可以尝试以下方法:
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
.
推荐阅读
- node.js - Api post,空主体对象
- javascript - 在 vuejs 中更改组件数据
- r - R - 用户定义函数中的 dplyr 合并
- spring-batch - Spring Batch / Spring Batch 管理系统升级
- python - 合并 DataFrames 会产生意想不到的结果
- cordova - 电话静音时播放 Cordova 应用程序 PushNotification 声音
- angular - 带有isLoading的应用程序组件中的Angular7 *ngIf | 来自 redux 存储的异步管道抛出“ExpressionChangedAfterItHasBeenCheckedError”
- docker - Fedora 28/29 码头灯
- java - 当用户输入字符串而不是整数输入时捕获错误
- angular - 如何重置引导多选下拉角度2