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

mysql–ORDER BY RAND()似乎不是随机的,第1张

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

以上是内存溢出为你收集整理的mysql – ORDER BY RAND()似乎不是随机的全部内容,希望文章能够帮你解决mysql – ORDER BY RAND()似乎不是随机的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1168529.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存