www portable pagina org oficial sql sqlite

portable - sqlite website



Seleccione fila(s) al azar en SQLite (4)

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 rendimiento, 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 memoria y luego los clasifican , aquí hacemos un orden aleatorio en el campo de identificación de cada fila que está en la memoria porque está indexado, luego separamos X de ellos, y buscamos toda la fila usando estos identificadores X. .

¡Así que esto consume menos RAM y CPU a medida que la tabla crece!


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 obtener 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.


SELECT * FROM table ORDER BY RANDOM() LIMIT X


SELECT * FROM table ORDER BY RANDOM() LIMIT 1