Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

ORDER BY RAND() parece ser menos que aleatório


RAND() é executado apenas uma vez por consulta. Você pode verificar isso olhando para o conjunto de resultados.

Se você está tentando obter um pedido aleatório, deve usar NEWID() ou 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;