sqlite - 如何随机删除 SQLite 表中 20% 的行

标签 sqlite

下午好,我们想知道如何在具有 15000 行的 sqlite 表中随机删除 20% 的行。我们注意到这个问题已在 Stack Overflow 中使用 SQL Server 得到解决 Select n random rows from SQL Server table . 但是 SQL Server 脚本在 sqlite 中似乎无法正常运行。我们如何将 SQL Server 脚本转换为 sqlite 等效脚本?谢谢。

最佳答案

或者,由于 sqlite 中的 random() 函数返回一个带符号的 64 位整数,我们可以将此空间内的一个点计算为 (2^63) * 0.6 。大于此的有符号整数将占正有符号 64 位整数集的 40%,因此占整个集合的 20%。

截断为下面的整数,这是 5534023222112865484 。

因此,您应该能够通过一个简单的操作获得 20% 的行:

   SELECT * FROM table WHERE random() > 5534023222112865485

或者在你的情况下,因为你想删除那么多:

   DELETE FROM table WHERE random() > 5534023222112865485

希望您喜欢这种方法。如果您希望从此类操作中获得高性能,它实际上可能是合适的,但它可能取决于硬件/版本,因此可能不值得冒这个风险。

关于sqlite - 如何随机删除 SQLite 表中 20% 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6037675/

相关文章:

Android SQLite long 值被检索/转换为 int 值

Sqlite FTS,在匹配运算符之间使用 OR

php - PHP SQLite3查询忽略第一个单词

python - 将 Sqlite 与 WAL 结合使用

php - 在 PHP 中制作可分发的独立程序

.net - 在 .NET 4 中使用 Fluent NHibernate + SQLite 有问题吗?

mysql - SQL查询忽略条件

c# - SQLite 事务抛出我无法弄清楚的异常

sql - 使用触发器更新多个表

android - 在android中执行sql