我有一个相当简单的 SQL (MySQL):
SELECT foo FROM bar ORDER BY rank, RAND()
我注意到当我刷新结果时,随机性很弱。
目前样本数据中有六个排名相同的结果(整数零)。有很多随机性测试,但这里有一个简单的手动测试:运行两次时,两次运行的第一个结果应该相同,大约有六分之一的时间。这肯定不会发生,领先的结果至少有三分之一的时间是相同的。
我想要对排列进行均匀分布。我不是专家统计学家,但我很确定 ORDER BY RAND()
应该可以做到这一点。我错过了什么?
对于 MySQL,SELECT rand(), rand()
显示两个不同的数字,所以我不相信“每个查询一次”的解释
最佳答案
RAND()
is only executed once per query.您可以通过查看结果集来验证这一点。
如果您尝试获得随机顺序,您应该使用 NEWID()
或 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;
关于mysql - ORDER BY RAND() 似乎不那么随机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016888/