Chr*_*ris 4 sql random netezza
Netezza说它的random()函数生成一个介于0.0和0.99999之间的浮点数......我试图在一个范围内(例如,在5到10之间)生成随机整数.互联网告诉我使用这样的等式将分数缩放到范围内的数字:
select f,count(*) from (
select CAST(5 + random() * (10-5) as INT) as f
from table_of_numbers
where number between 1 and 5000
) x group by 1 order by 1
Run Code Online (Sandbox Code Playgroud)
但是,当我使用该代码时,极值在样本中代表性不足:
F COUNT
5 486 <---
6 992
7 1057
8 1000
9 937
10 528 <---
有谁知道我怎么解决这个问题?
谢谢!
表达式random()*(10-5)
生成0到4.99999之间的数字.但是,您有6个值的范围(5,6,7,8,9和10).所以你的表达式是在6个桶中拆分5个值.
你的代码发现第一个和最后一个是半满的.显然,cast()
操作是对值进行舍入而不是截断它们(我不认为这是ANSI SQL,但它可以解释您的观察结果).这掩盖了这个问题.
试试这个:
select CAST(4.5 + random() * (10-5+1) as INT)
Run Code Online (Sandbox Code Playgroud)
在其他数据库中,这样的东西应该工作:
select CAST(5 + random() * (10-5+1) as INT)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7131 次 |
最近记录: |