SELECT foo FROM bar ORDER BY rank,RAND()
我注意到当我刷新结果时,随机性很可疑.
在目前的样本数据中,有六个结果具有相等的等级(整数零).有很多关于随机性的测试,但是这是一个简单的手工测试:当运行两次时,第一个结果在两次运行中应该是相同的,大约六分之一的时间.这当然不会发生,主要结果至少有三分之一的时间是相同的.
我希望在排列上有统一的分布.我不是专家统计学家,但我很确定ORDER BY 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;
原文地址:https://www.jb51.cc/mysql/433066.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。