我發現這完全令人震驚,但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