Ich finde dies völlig erstaunlich, aber die Funktion rand() in DB2 gibt gelegentlich einen Wert von eins zurück. Betrachten Sie diese Auswahl gegen eine Tabelle, die über 150K Zeilen hat:Random-Funktion in DB2 ist nicht gleichmäßig verteilt
In den meisten Sprachen/DB, etc., würde ich erwarten, dass diese 10 Zeilen von Daten zurückzukehren, wobei die Verteilung in etwa gleich ist. Was ich tatsächlich bekommen, ist Reihen, wie in der folgenden:
Num N
--- -----
10 12
9 14871
8 14975
7 15213
6 15004
5 15196
4 14998
3 14916
2 14926
1 15081
0 15017
Shocking! In meinem Anwendungsfall aktualisiere ich Zeilen in einer Tabelle und möchte einen zufälligen Wert zuweisen, der jedoch im Gegensatz zu der oben beschriebenen schrecklichen Situation zufällig verteilt sein muss.
Also denke ich derzeit, dass ich das Update mehrmals in einer Schleife machen muss, in den zweiten ... nten Wiederholungen fortfahrend, um die Reihen zu versuchen, die unglücklich genug waren, um mit rand zu enden() = 1.0
Oder ich könnte rand()/1.00001 verwenden, aber das ist nur albern (und nicht gleichmäßig verteilt, entweder)!
Irgendwelche Ideen zu einem besseren Weg, um dies zu nähern (ohne zum Beispiel UDFs usw. zu schreiben, würde geschätzt werden).
Gibt es jemals den genauen Wert von 0 zurück? Wenn nicht, können Sie tun, was Sie wollen, indem Sie eher aufrunden als nach unten. –
Nicht sicher, warum Sie diese "schockierend" oder "erstaunlich" finden, da Ihre Eimer nicht gleich sind. Beachten Sie, dass jeder zufällige Wert zwischen 0.9 und 0.999999 ... in den "9" -Knopf geht, aber nur genau 1.0 in den "10" -Knopf. – mustaccio