我发现这完全令人震惊,但DB2中的rand()函数偶尔返回值为1。考虑对在它拥有大约150K行的表这个选择:DB2中的随机函数不是均匀分布的
在大多数语言/ DB的,等等,我预计这将返回10行数据,与分布为大致相等。我实际上得到的是列,如下列:
Num N
--- -----
10 12
9 14871
8 14975
7 15213
6 15004
5 15196
4 14998
3 14916
2 14926
1 15081
0 15017
令人震惊!在我的用例中,我正在更新表中的行并希望分配一个随机值,但它需要随机分布,而不是上面的可怕情况。
所以我现在想我必须在一个循环中多次执行更新,在第二次...第n次迭代中继续尝试以不幸运行结束的行(以rand()结尾) = 1.0
或者,我可以使用rand()/ 1.00001,但这只是愚蠢的(也不是均匀分布的)!不知道如何更好地处理这个问题(没有,例如,写UDF的,等等,将不胜感激)。
它是否返回0的确切值?如果没有,你可以通过四舍五入来做你想做的事。 –
不知道为什么你会发现这个“令人震惊”或“惊人的”,因为你的桶不相等。考虑到0.9和0.999999之间的每个随机值进入“9”桶,但只有1.0正好进入“10”桶。 – mustaccio