使用 random() 获取随机条数的数据但结果并没有接近 1/2?

user_default_avatar 表中共有 1000 条数据,但查询的结果永远都是大于 500 而非在 500 左右浮动?

select count(0)
from user_default_avatar
where id >= ((select max(id)
              from user_default_avatar)
             - (select min(id)
                from user_default_avatar))
            * rand()
            + (select min(id)
               from user_default_avatar);

不清楚 sql 函数发生了什么,有人知道是怎么回事么?

id 的策略使用的是 twitter 的 雪花算法 自动生成,算是自增长吧


之前直接用 rand() 被罵慘了

select *
from user_default_avatar
order by rand()
limit 100;
阅读 2.4k
2 个回答

好吧,实际上是和数据的 id 分布密度有关系,后面较大的数字分布密度大的话就会造成数量大于 1/2 的情况

这个算法并不比你被骂惨了的那个效率高。你不怕再被骂一次吗?
两个方法都需要为每一行都计算一次随机数,你的新语句可能还不如之前的快呢。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题