rand()运算符如何工作?

时间:2016-06-13 13:04:22

标签: sql tsql random

很快就想问RAND()运算符是否以相同的数字分配值?例如如果我在一个表中有100行和一个名为NumberOfItems的列,并且我想将值1-10分配给它们,使得它在100条记录之间平均分配(10条记录将具有1,10条将具有2条.... ..)

我的陈述是:

select CAST(RAND(CHECKSUM(NEWID())) * 10 as INT)+1

2 个答案:

答案 0 :(得分:2)

否 - 概率分布应该是统一的,这意味着你有0.2的概率为0.5,但没有保证指定的“随机”集合数字将是统一的。

答案 1 :(得分:-1)

我这里没有SQL Server来测试,但这可能对你有用。

SELECT
        ((ROW_NUMBER() OVER(ORDER BY T1.rand_col)) % 10) + 1 as value_col,
        T1.col1,
        T1.col2,
        T1.col3

FROM (
        SELECT col1,
               col2,
               col3,
               RAND(CHECKSUM(NEWID())) as rand_col
        FROM   your_table
      ) T1

ORDER BY T1.rand_col

它的作用是:

  • 子选择T1是您的原始表格(我称之为your_table),附加了一个随机列rand_col
  • ORDER BY T1.rand_col
  • 中的此随机列对值进行排序
  • 通过ROW_NUMBER() OVER(ORDER BY T1.rand_col)
  • 通过执行% 10
  • 将数字的连续范围限制为0-9
  • 总和1将范围从0-9更改为1-10`(...)+ 1

一些参考