En MySQL puedo usar la función RAND(), ¿hay alguna alternativa en SQLite 3?SQLite - ORDER BY RAND()
Respuesta
usando random():
SELECT foo FROM bar
WHERE id >= (abs(random()) % (SELECT max(id) FROM bar))
LIMIT 1;
EDIT (por QOP): Dado que los documentos en SQLite Autoincrement columnas ed establece que:
El algoritmo de selección ROWID normales descrito anteriormente generará monótonamente crecientes ROWIDs únicas, siempre y cuando no utilice nunca el valor máximo ROWID y nunca se borra la entrada en la tabla con el ROWID más grande. Si alguna vez borra filas, las ROWIDs de pueden ser reutilizadas al crear nuevas filas.
Lo anterior sólo es cierto si usted no tiene una columna INTEGER PRIMARY KEY AUTOINCREMENT
(todavía no tendrán ningún problema con INTEGER PRIMARY KEY
columnas). De todos modos, esto debería ser más portátil/fiable:
SELECT foo FROM bar
WHERE _ROWID_ >= (abs(random()) % (SELECT max(_ROWID_) FROM bar))
LIMIT 1;
ROWID
, _ROWID_
y OID
son todos los alias de la fila SQLite ID interno.
+1 , Esto es mucho más rápido que las otras opciones siempre que id sea índice. –
Sí, esta solución es más rápida, pero supone que el ID comienza en 1 y no tiene espacios vacíos. De lo contrario, las filas que siguen a las brechas se eligen "aleatoriamente" con más frecuencia que otras filas. –
@Bill, gracias por señalar el problema en mi respuesta – dfa
resuelto:
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
No estoy de acuerdo. Aquí tenemos dos bits de información, cómo seleccionar un solo registro de forma aleatoria, cómo enumerar todos los registros al azar. Nunca he necesitado hacer ninguna de las dos cosas, pero si lo hago, ahora sé cómo. También sé que MySQL lo diferencia de SQLlite. Una pregunta súper técnica sería más impresionante, pero menos útil. –
Lo primero que pensé fue que no había ninguna función para ordenar los resultados aleatoriamente, o si existiera tal función/función sería considerablemente más oscura, eso es lo que sucede con los disparadores de SQLite, por ejemplo. –
He votado esto porque realmente respondió primero. –
SELECT * FROM table ORDER BY RANDOM() LIMIT 1;
Y para el registro, el límite no tiene que ser 1 si desea ordenar toda la tabla de forma aleatoria y acceder a todas las filas en ese orden aleatorio. – lemontwist
Esto también funcionará si tiene una cláusula WHERE compleja y quiere una fila aleatoria de esa lista filtrada. La respuesta aceptada no es compatible con eso fácilmente. –
Y uno más esto no hay una fila duplicada devuelta en el resultado, esto es lo que necesito (y) –
Para un uso mucho mejor rendimiento en esta SQLite:
SELECT * FROM table WHERE id IN (SELECT id FROM table ORDER BY RANDOM() LIMIT x)
Esto es aplicable a MySQL también. Esto funciona más rápido porque los motores de SQL primero cargan los campos de filas proyectados en la memoria y luego los clasifican, aquí solo cargamos y ordenamos aleatoriamente el campo de id de filas, luego obtenemos X de ellos, y encontramos las filas completas de estos X identificadores que es por defecto indexado.
- 1. Android SQLite ORDER BY no funciona
- 2. SQLite LIKE & ORDER BY Consulta de coincidencia
- 3. ORDER BY en diferentes columnas en diferentes direcciones en SQLite
- 4. Convertir clave pública RSA a RSA DER
- 5. Convertir .pem certificado a .der/.cer
- 6. Clave privada con formato ASN.1 DER
- 7. Importación de archivos con Extensión .sqlite en R
- 8. Android SQLite R-Tree - ¿Cómo instalar el módulo?
- 9. ¿Cómo decodifico una cadena codificada DER en Java?
- 10. ¿Cómo podemos convertir una cadena de PEM a Der formato
- 11. Decodificar un DER OCTET STRING ASN.1 con OpenSSL
- 12. ¿Cómo puedo obtener SecKeyRef desde el archivo DER/PEM
- 13. Usando la cláusula ORDER BY dentro de la función GROUP_CONCAT en SQLite
- 14. convirtiendo la salida del comando "by" de R en el marco de datos
- 15. Cómo combinar GROUP BY, ORDER BY y HABER
- 16. El uso de ORDER BY y GROUP BY junto
- 17. SQL Server: Diferencia entre PARTITION BY y GROUP BY
- 18. GRUPO BY la consulta ignora la cláusula ORDER BY
- 19. Índice de MySQL para Group By/Order By
- 20. ¿Cómo usar la partición by order by in over function?
- 21. android: ORDER BY en la consulta
- 22. Excepción SQLite: SQLite ocupado
- 23. SELECCIONANDO "primero" (según lo determinado por ORDER BY) fila FROM filas casi duplicadas (según lo determinado por GROUP BY, HAVING, COUNT) dentro de SQLite
- 24. SQL "GROUP BY" problema
- 25. MySQL ORDER BY COUNT()?
- 26. SQL - ORDER BY
- 27. CakePHP y GROUP BY
- 28. múltiplos By con LINQ
- 29. Python max-by function?
- 30. GROUP BY en MATLAB
Pregunta relacionada: http://stackoverflow.com/questions/2171578/seeding-sqlite-random –