Seleccione fila (s) random en SQLite

En MySQL, puede seleccionar X filas aleatorias con la siguiente instrucción:

SELECT * FROM table ORDER BY RAND() LIMIT X 

Sin embargo, esto no funciona en SQLite. ¿Hay un equivalente?

Para un mejor performance, use:

 SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x) 

Los motores SQL primero cargan campos proyectados de filas en la memory y luego los clasifican , aquí hacemos un order aleatorio en el campo de identificación de cada fila que está en la memory porque está indexado, luego separamos X de ellos, y buscamos toda la fila usando estos identificadores X. .

¡Así que esto consume less RAM y CPU a medida que la table crece!

SELECT * FROM table ORDER BY RANDOM() LIMIT X

 SELECT * FROM table ORDER BY RANDOM() LIMIT 1 

Todas las respuestas aquí están basadas en ORDER BY . Esto es muy ineficiente (es decir, inutilizable) para juegos grandes. ¿Por qué no simplemente colocar abs(CAST(random() AS REAL))/9223372036854775808 < 0.5 en la cláusula WHERE para get en este caso 0.5 chance de golpe?

 SELECT * FROM table WHERE abs(CAST(random() AS REAL))/9223372036854775808 < 0.5 

El número grande es el número absoluto máximo que puede producir random() . El abs() es porque está firmado. El resultado es una variable aleatoria distribuida uniformemente entre 0 y 1.