我有一个相当简单的SQL(MySQL的):
SELECT foo FROM bar ORDER BY rank, RAND()
我注意到,当我刷新结果,随机性是可疑弱。
在此刻的样本数据有六个结果与等于秩(整数零)。 有很多的随机性测试,但这里是一个简单的手工做的事: 运行两次时,第一个结果应该是一样的在两个运行约六分之一的时间 。 这肯定不会发生,导致的结果是时间的相同的至少三分之一。
我想在排列均匀分布。 我不是专家,统计学家,但我敢肯定ORDER BY RAND()
要达到这一点。 我在想什么?
与MySQL, SELECT rand(), rand()
显示两个不同的号码,所以我不买了“每一次查询”的解释
RAND()
只每个查询执行一次。 您可以通过查看结果集验证这一点。
如果你想获得一个随机的顺序,你应该用或者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;
该RAND()
不能被刷新为每一行。 一个可能的解决方案可能是:
SELECT foo FROM bar ORDER BY rank, CHECKSUM(NEWID())