加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql – ORDER BY RAND()似乎不是随机的

发布时间:2020-12-11 23:47:56 所属栏目:MySql教程 来源:网络整理
导读:我有一个相当简单的SQL(MySQL): SELECT foo FROM bar ORDER BY rank,RAND() 我注意到当我刷新结果时,随机性很可疑. 在目前的样本数据中,有六个结果具有相等的等级(整数零).有很多关于随机性的测试,但是这是一个简单的手工测试:当运行两次时,第一个结果在两

我有一个相当简单的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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读