下午好,我们想知道如何在具有 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/