Estoy usando MSSQL Server 2005. En mi base de datos, tengo una tabla "customerNames" que tiene dos columnas "Id" y "Nombre" y aprox. 1,000 resultados.
Estoy creando una funcionalidad en la que tengo que elegir 5 clientes al azar cada vez. ¿Alguien puede decirme cómo crear una consulta que obtenga 5 filas al azar (Id y Nombre) cada vez que se ejecute la consulta?
Respuestas:
Dicho esto, todo el mundo parece venir a esta página para obtener una respuesta más general a su pregunta:
Seleccionar una fila aleatoria en SQL
Seleccione una fila aleatoria con MySQL:
Seleccione una fila aleatoria con PostgreSQL:
Seleccione una fila aleatoria con Microsoft SQL Server:
Seleccione una fila aleatoria con IBM DB2
Seleccione un registro aleatorio con Oracle:
Seleccione una fila aleatoria con sqlite:
fuente
update tbl_vouchers set tbl_UsersID = (select top(1) id from tbl_Users order by NEWID())
- editar: no puedo hacer que el formato funcione en los comentarios :(fuente
En caso de que alguien quiera una solución PostgreSQL:
fuente
Quizás este sitio sea de ayuda.
Para aquellos que no quieren hacer clic:
fuente
Aquí hay una buena solución específica de Microsoft SQL Server 2005. Se ocupa del problema en el que está trabajando con un gran conjunto de resultados (no es la pregunta que sé)
Selección de filas al azar de una tabla grande http://msdn.microsoft.com/en-us/library/cc441928.aspx
fuente
Si tiene una tabla con millones de filas y le preocupa el rendimiento, esta podría ser una mejor respuesta:
https://msdn.microsoft.com/en-us/library/cc441928.aspx
fuente
Esta es una pregunta antigua, pero intentar aplicar un nuevo campo (ya sea NEWID () o ORDER BY rand ()) a una tabla con un gran número de filas sería prohibitivamente costoso. Si tiene ID únicos incrementales (y no tiene agujeros) será más eficiente calcular el X # de ID que se seleccionará en lugar de aplicar un GUID o similar a cada fila y luego tomar el X # superior de.
Si quisiera seleccionar muchas más filas, buscaría llenar una #tempTable con una ID y un montón de valores rand () y luego usar cada valor rand () para escalar a los valores min-max. De esa manera no tiene que definir todos los parámetros @ randomId1 ... n. He incluido un ejemplo a continuación utilizando un CTE para completar la tabla inicial.
fuente
fuente
He encontrado que esto funciona mejor para Big Data.
TABLESAMPLE(n ROWS) or TABLESAMPLE(n PERCENT)
es aleatorio pero necesita agregar elTOP n
para obtener el tamaño de muestra correcto.El uso
NEWID()
es muy lento en mesas grandes.fuente
Como expliqué en este artículo , para barajar el conjunto de resultados de SQL, debe usar una llamada de función específica de la base de datos.
Entonces, suponiendo que tengamos la siguiente tabla de base de datos:
Y las siguientes filas en la
song
tabla:Oráculo
En Oracle, debe usar la
DBMS_RANDOM.VALUE
función, como se ilustra en el siguiente ejemplo:Al ejecutar la consulta SQL mencionada anteriormente en Oracle, obtendremos el siguiente conjunto de resultados:
servidor SQL
En SQL Server, debe usar la
NEWID
función, como se ilustra en el siguiente ejemplo:Al ejecutar la consulta SQL mencionada anteriormente en SQL Server, obtendremos el siguiente conjunto de resultados:
PostgreSQL
En PostgreSQL, debe usar la
random
función, como se ilustra en el siguiente ejemplo:Al ejecutar la consulta SQL mencionada anteriormente en PostgreSQL, obtendremos el siguiente conjunto de resultados:
MySQL
En MySQL, debe usar la
RAND
función, como se ilustra en el siguiente ejemplo:Al ejecutar la consulta SQL mencionada anteriormente en MySQL, obtendremos el siguiente conjunto de resultados:
fuente
Si está utilizando una tabla grande y desea acceder al 10 por ciento de los datos, ejecute el siguiente comando:
SELECT TOP 10 PERCENT * FROM Table1 ORDER BY NEWID();
fuente