W MySQL można wybrać X. losowe wierszy z następującym stwierdzeniem:Wybierz losowy wiersz (y) w SQLite
SELECT * FROM table ORDER BY RAND() LIMIT X
Nie oznacza to jednak, praca w SQLite. Czy istnieje odpowiednik?
W MySQL można wybrać X. losowe wierszy z następującym stwierdzeniem:Wybierz losowy wiersz (y) w SQLite
SELECT * FROM table ORDER BY RAND() LIMIT X
Nie oznacza to jednak, praca w SQLite. Czy istnieje odpowiednik?
na znacznie lepszą wydajność użytku:
SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x)
silniki SQL pierwszy ładunek prognozowanych pola wierszy na pamięć następnie posortować je, tutaj po prostu zrobić losowy sortuj pola id każdego wiersza, który jest w pamięci, ponieważ jest indeksowany, następnie oddziel je X i znajdź cały wiersz używając tych X identyfikatorów.
To zużywa mniej pamięci RAM i procesora, gdy tabela rośnie!
Metoda 2 była znacznie ważniejsza niż przyjęta odpowiedź. Dzięki! –
To wspaniałe dzięki, zaktualizowałem zaakceptowaną odpowiedź :) –
WOW !! taki występ !!!! – Omid
SELECT * FROM table ORDER BY RANDOM() LIMIT X
Dzięki, że to wystarczy –
rekord: działa, ale na większych stołach jest wolny. Szybszy sposób (choć nie całkiem taki sam) byłby: 'WYBIERZ * Z tabeli WHERE random()% k = 0 LIMIT n;'. Wadą tego jest to, że rekordy z niższymi kluczami podstawowymi mają większą szansę na wybranie. [Zrobione stąd] (http://blog.rodolfocarvalho.net/2012/05/how-to-select-random-rows-from-sqlite.html) – ren
Tak, będzie powolny na dużych stołach, ponieważ kończy się wymuszenie skanowania tabeli. Minusem chęci robienia takich rzeczy w SQL. Najlepszym sposobem byłoby wybranie losowych przesunięć w twoim przednim końcu. – Donnie
SELECT * FROM table ORDER BY RANDOM() LIMIT 1
Wszystkie odpowiedzi tutaj są oparte na ORDER BY
. Jest to nieefektywne (to jest bezużyteczne) dla dużych zestawów. Dlaczego nie po prostu umieścić abs(CAST(random() AS REAL))/9223372036854775808 < 0.5
w klauzuli WHERE
, aby uzyskać w tym przypadku szansę na trafienie 0,5?
SELECT *
FROM table
WHERE abs(CAST(random() AS REAL))/9223372036854775808 < 0.5
Duża liczba to maksymalna bezwzględna liczba, którą może wygenerować random()
. Numer abs()
jest podpisany. Rezultatem jest równomiernie rozłożona zmienna losowa z zakresu od 0 do 1.
jeden http://stackoverflow.com/questions/2279706/select-random-row-from-an-sqlite-table –