sql >> Databasteknik >  >> RDS >> Mysql

ORDER BY RAND() verkar vara mindre än slumpmässigt

RAND() exekveras endast en gång per fråga. Du kan verifiera detta genom att titta på resultatuppsättningen.

Om du försöker få en slumpmässig ordning, bör du använda antingen NEWID() eller 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;


  1. Åtkomst nekad för användaren 'root'@'localhost' (med lösenord:Ja) efter lösenordsåterställning LINUX

  2. Oracle PL/SQL Trigger körs endast om ändringar görs i data efter 9-5 timmar

  3. lagra lösenord i SQL Server

  4. Returnera en sql-variabels värde från en Oracle SQL-fråga tillbaka till .NET-kod