sql >> Base de Datos >  >> RDS >> Mysql

ORDER BY RAND() parece ser menos que aleatorio

RAND() solo se ejecuta una vez por consulta. Puede verificar esto mirando el conjunto de resultados.

Si está tratando de obtener un pedido aleatorio, debe usar NEWID() o CHECKSUM(NEWID()) .

WITH T AS ( -- example using RAND()
  SELECT 'Me' Name UNION SELECT 'You' UNION SELECT 'Another'
)
SELECT Name, RAND()
FROM T;

WITH T AS ( -- example using just NEWID()
  SELECT 'Me' Name UNION SELECT 'You' UNION SELECT 'Another'
)
SELECT Name, NEWID()
FROM T;

WITH T AS ( -- example getting the CHECKSUM() of NEWID()
  SELECT 'Me' Name UNION SELECT 'You' UNION SELECT 'Another'
)
SELECT Name, CHECKSUM(NEWID())
FROM T;