Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ORDER BY RAND() scheint alles andere als zufällig zu sein

RAND() wird nur einmal pro Abfrage ausgeführt. Sie können dies überprüfen, indem Sie sich die Ergebnismenge ansehen.

Wenn Sie versuchen, eine zufällige Reihenfolge zu erhalten, sollten Sie entweder NEWID() verwenden oder 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;