选择具有唯一随机数的查询

时间:2016-07-22 11:40:08

标签: mysql sql

我想创建一个SQL语句来从表中选择我的所有数据(大约5000个条目),并为每一行分配一个唯一的随机数(在100000和999999之间)。

如何确保每个随机数都是唯一的?

如果我尝试类似

的话
SELECT pid, FLOOR(RAND() * (999999 - 100000 + 1)) + 100000 as 'RanNum' FROM mytable

并检查(例如在Excel中),至少有一些RanNum是重复的。如何在查询中阻止此操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为唯一的" easy"在单个查询中执行此操作的方法是对范围进行分区并为每个范围生成一个数字。像这样:

select t.*,
       floor(rand() * (range / @rn) + 1 + 100000 + (rn - 1) * (range / @rn))
from (select t.*, (@rn := @rn + 1) as seqnum,
             (999999 - 100000) as range
      from mytable t
      -- order by rand()
     ) t;