¿Cómo seleccionar filas aleatoriamente en SQL?

Resuelto djmzfKnm asked hace 15 años • 14 respuestas

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?

djmzfKnm avatar Feb 24 '09 13:02 djmzfKnm
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
Curtis Tasker avatar Jul 30 '2009 23:07 Curtis Tasker
SELECT TOP 5 Id, Name FROM customerNames ORDER BY NEWID()
Cody Caughlan avatar Feb 24 '2009 06:02 Cody Caughlan

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 npara obtener el tamaño de muestra correcto.

El uso NEWID()es muy lento en mesas grandes.

Billy avatar Aug 15 '2013 23:08 Billy