下午好,我們想知道如何隨意刪除15000行sqlite表中20%的行。我們注意到這個問題在Stack Overflow中使用SQL Server Select n random rows from SQL Server table解決。 但SQL Server腳本似乎不能在sqlite中正常工作。我們如何才能將SQL Server腳本轉換爲等效的sqlite腳本?謝謝。如何在SQLite表中隨機刪除20%的行
回答
或者,由於在源碼隨機()函數返回一個有符號的64位整數,我們可以此空間(2^63)* 0.6內計算的點。大於這個的簽名整數將是正整數64位整數集合的40%,因此整個集合的20%。
截斷爲下面的整數,這是5534023222112865484。
因此,你應該能夠得到您行的20%,用一個簡單的:
SELECT * FROM table WHERE random() > 5534023222112865485
或者在你的情況下,因爲要刪除很多:
DELETE FROM table WHERE random() > 5534023222112865485
我希望你享受這種做法。如果你想從這樣的操作獲得高性能,它可能確實是合適的,但它可能依賴於硬件/版本,因此可能不值得冒這個風險。
謝謝你的回覆。我只是試圖接受你的答案。一旦我們運行DELETE FROM table WHERE random()> 5534023222112865485,表中的rowid將會出現空隙。你知道要運行哪些sqlite語句來關閉rowid間隔嗎?謝謝。 – Frank 2011-05-18 01:13:28
作爲一般的良好實踐,您不應該關心ROWID的實際值,以及序列中是否存在缺口。由於各種原因,數據庫在任何情況下最終都會在正常使用過程中出現序列差距。 例如,當你BEGIN;插;插;承諾;在你開始時在一個線程中;插; ROLLBACK;在另一個線程中,您最終可能會在ROWID中產生差距。 – karora 2011-05-18 02:17:46
另外,正如有人在下面的評論中指出的那樣,使用WHERE(random()%5)= 0真的是一個更好的解決方案,因爲它不需要64位signed int ,而且它不具備依賴硬件/版本的潛力。 – karora 2011-05-18 02:21:31
不是'隨機' - 但如果你在桌面上有一個標識列,你可以在統計上刪除非常接近五分之一的行。
@ Will A,謝謝你的回答。我剛接受你的回答。我們表中唯一的標識列是隱式的ROWID列。我們可以在你的答案中用ROWID替換ID嗎?謝謝你的建議。 – Frank 2011-05-17 22:23:19
@弗蘭克 - 我的榮幸,先生。是的,ROWID會很好。 – 2011-05-17 22:26:31
@Frank:你可以使用'rowid'。你也可以使用'WHERE random()%5 = 0'。 – 2011-05-17 22:27:17
嘗試:
DELETE FROM TABLE
WHERE ROWID IN (SELECT ROWID FROM TABLE ORDER BY RANDOM() LIMIT 3000)
如果你想在一個子查詢來計算20%:LIMIT (SELECT CAST((COUNT(id) * 0.2) AS INT)
SQLite - ORDER BY RAND()提供一個提示。因此,這可能工作?
DELETE FROM table WHERE id IN(
SELECT id FROM table ORDER BY RANDOM() LIMIT (
SELECT CAST((COUNT(id) * 0.2) AS INT) FROM table
)
);
- 1. 隨機刪除行
- 2. 如何從kdb表中刪除隨機行?
- 3. 在sqlite表中執行刪除行
- 4. sqlite的如何刪除表
- 5. 在Java中,如何刪除SQLite表
- 6. 如何刪除表中最新的20行?
- 7. 在android sqlite表中刪除一行
- 8. 如何刪除表SQlite?
- 9. 如何從列表中刪除隨機元素,它在Python
- 10. 如何刪除sqlite中的下n行
- 11. 如何刪除整行SQLite中的機器人
- 12. 在SQLite中刪除行3
- 13. 在sqlite中刪除一行
- 14. 如何在列表視圖中從sqlite中刪除行Android
- 15. 如何alertview IOS刪除%20
- 16. 如何刪除%20%20%20 URL傳遞之前在asp.net
- 17. 隨機刪除Class'objects
- 18. 如何刪除行與GUID值SQLite中
- 19. 如何使用SQLite隨機()
- 20. 如何從Android中的SQLite表中刪除一行
- 21. 如何從sqlite中刪除表中的所有行?
- 22. 如何從SQLite android中的表中刪除一行?
- 23. 如何從sqlite iOS中的一個表中刪除多行?
- 24. 使用隨機數字刪除文件的隨機行。 Fortran90
- 25. 從SQLite的表中刪除
- 26. 如何刪除隨機數字序列
- 27. 從sqlite表中刪除一行
- 28. 如何從sqlite的行表中刪除標籤?
- 29. 如何刪除sqlite數據庫表中的一行?
- 30. 如何刪除sqlite中的第一行後重新排列表?
[Kevin Peno的回答](https://stackoverflow.com/a/6037746/2932052)有什麼不對? – Wolf 2018-01-17 15:42:26