¿Cómo seleccionar filas aleatoriamente en SQL?
Estoy usando MSSQL Server 2005. En mi base de datos, tengo una tabla "customerNames" que tiene dos columnas "Id" y "Name" 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 aleatorias (Id. y Nombre) cada vez que se ejecute la consulta?
Aceptado
SELECT TOP 5 Id, Name FROM customerNames
ORDER BY NEWID()
Dicho esto, todo el mundo parece venir a esta página en busca de una respuesta más general a su pregunta:
Seleccionar una fila aleatoria en SQL
Seleccione una fila aleatoria con MySQL:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Seleccione una fila aleatoria con PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1
Seleccione una fila aleatoria con Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()
Seleccione una fila aleatoria con IBM DB2
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
Seleccione un registro aleatorio con Oracle:
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1
Seleccione una fila aleatoria con sqlite:
SELECT column FROM table
ORDER BY RANDOM() LIMIT 1
SELECT TOP 5 Id, Name FROM customerNames ORDER BY NEWID()
He descubierto que esto funciona mejor para big data.
SELECT TOP 1 Column_Name FROM dbo.Table TABLESAMPLE(1 PERCENT);
TABLESAMPLE(n ROWS) or TABLESAMPLE(n PERCENT)
es aleatorio pero es necesario agregarlo TOP n
para obtener el tamaño de muestra correcto.
El uso NEWID()
es muy lento en mesas grandes.