为什么这会在每列中返回不同的随机数?如果我使用setseed()
,我认为我会得到相同的随机数。但看起来每个random()
的调用都有新的常量随机数向量。
select setseed(0.5);
select
random(),
random(),
random()
from
generate_series(1,20);
每次都返回:
0.798512778244913;0.518533017486334;0.0734698106534779
0.563445927575231;0.00328421639278531;0.859378454275429
0.537976825609803;0.567121817730367;0.311047440394759
0.420166166499257;0.203177386429161;0.125661129131913
0.754696044139564;0.424046442843974;0.202209176961333
...
现在我看到(感谢Ed Heal)随机数是由行生成的。为了证明这一点:
select setseed(0.5);
select random(), random(), random();
select setseed(0.5);
select random()
union all
select random()
union all
select random();
这不是有点奇怪吗?我的意思是,为什么它不按列工作?
答案 0 :(得分:2)
因为这部分查询
select
random(),
random(),
random()
为一行生成三个随机数!
答案 1 :(得分:2)
如果您想在所有列中使用相同的值:
select r, r, r
from
(
select random() r
from generate_series(1,3)
) s
;
r | r | r
-------------------+-------------------+-------------------
0.607540448661894 | 0.607540448661894 | 0.607540448661894
0.973879527300596 | 0.973879527300596 | 0.973879527300596
0.659207154065371 | 0.659207154065371 | 0.659207154065371
你的想法是这样的:
select setseed(0.5), random(), setseed(0.5), random();
setseed | random | setseed | random
---------+-------------------+---------+-------------------
| 0.798512778244913 | | 0.798512778244913
但我不知道那是多么可靠。