¿Es posible escribir una consulta SQL que devuelva las filas de la tabla en orden aleatorio cada vez que se ejecuta la consulta?Devuelve filas en orden aleatorio
Respuesta
SELECT * FROM table
ORDER BY NEWID()
Esta es la solución más simple:
SELECT quote FROM quotes ORDER BY RAND()
Aunque no es el más eficiente. This one es una mejor solución.
Bastante seguro de que no funciona. El RAND() en la cláusula ORDER BY solo se calcula una vez, por lo que terminas con un orden natural. Para probarlo, pruebe ORDER BY RAND(), 1 y obtendrá una lista de sus cotizaciones ordenadas por la primera columna (al menos en SQL Server 2005). –
Hm, estoy bastante seguro de que esto ha funcionado para mí en el pasado, tal vez depende del producto que utilice. –
Parece que no funciona en MS SQL. –
El método habitual es utilizar la función NEWID(), que genera un GUID único. Por lo tanto,
SELECT * FROM dbo.Foo ORDER BY NEWID();
La opción obvia, la función RAND() no funciona directamente, pero aquí hay una solución alternativa: http://weblogs.sqlteam.com/jeffs/archive/2004/11/22/2927.aspx – devstuff
+1 funciona, pero Dave Barker fue más rápido :) –
Para ser eficiente y aleatorio, podría ser mejor tener dos consultas diferentes.
Algo así como ...
identificador de tabla SELECT FROM tabla
Luego, en el idioma seleccionado, elija un ID aleatorio, a continuación, tire de los datos de esa fila.
SELECT * FROM tabla WHERE table_id = $ rand_id
Pero eso no es realmente una buena idea si usted está esperando a tener un montón de filas de la tabla. Sería mejor si pone algún tipo de límite en lo que selecciona al azar. Para publicaciones, quizás elija al azar solo artículos publicados en el último año.
He aquí un ejemplo (source):
SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint);
Esto es lo que necesita:
SELECT * FROM ORDEN nombre_tabla POR RAND() LIMIT 1
La pregunta fue etiquetada SQL Server. El RAND() no funciona y el LÍMITE no se reconoce, ni la pregunta pide limitar los resultados a un registro. – LarsTech
- 1. Orden aleatorio de filas Matlab
- 2. matriz multidimensional en orden aleatorio
- 3. MapReduce método de orden aleatorio
- 4. linq: ordenar por orden aleatorio
- 5. Métodos de llamada en orden aleatorio (C#)
- 6. orden aleatorio de imágenes en php
- 7. Reorganizar NSArray/MSMutableArray en orden aleatorio
- 8. PostgreSQL cambiando filas devueltas orden
- 9. 100k filas devueltas en un orden aleatorio, sin un tiempo de SQL a cabo por favor
- 10. ¿Orden de filas en heatmap?
- 11. ¿Cómo hacer un orden controlado "aleatorio"?
- 12. Esquema XSD que permite el orden aleatorio
- 13. php orden aleatorio de un foreach
- 14. Algoritmo para generar orden aleatorio de elementos
- 15. ¿Cómo hacer que EntityFramework agregue filas en orden?
- 16. ¿Por qué "SET TRANSACTION ISOLATION LEVEL LECT UNCOMMITTED" devuelve las filas en orden diferente?
- 17. ¿Una consulta SELECT siempre devuelve filas en el mismo orden? Tabla con índice agrupado
- 18. Visitar los puntos en un triángulo en un orden aleatorio
- 19. filas de orden C# datagridview?
- 20. Ruby - Ejecutando pruebas en orden aleatorio con rastrillo
- 21. Internet Explorer muestra atributos XML en orden aleatorio
- 22. ¿Puedo hacer que NUnit ejecute pruebas en orden aleatorio?
- 23. TABLESAMPLE devuelve el número de filas incorrecto?
- 24. ¿La instrucción foreach itera en orden o puede ser orden aleatorio?
- 25. Manipulación de MySQL subconsulta devuelve varias filas
- 26. función exec no devuelve todas las filas
- 27. ¿Por qué column = NULL no devuelve filas?
- 28. Magento getProductUrl() no devuelve la URL correcta (¿aleatorio?)
- 29. MySQL consulta UPDATE devuelve "0 filas afectadas"
- 30. Linq a SQL - Devuelve n filas superiores
Para MySQL use' ORDER BY uuid() '. (... para los que llegan a esta página a través de una búsqueda genérica, como yo!) –
Esto funciona, pero es terriblemente lento en la tabla que estoy seleccionando (14M + filas). ¿Es eso esperado? AFAIK, la tabla está indexada correctamente. –
@John: está seleccionando 14 millones de registros y generando y ordenando mediante un identificador único. Tal vez eres solo después de una sola fila al azar? En este caso, SELECCIONE la tabla TOP 1 FROM ORDER BY NEWID() –