2

为什么这会在每一列中返回不同的随机数?我认为如果我使用setseed(). 但看起来每次调用都有一个新的随机数常量向量random()

SQLFiddle

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();

这不是有点奇怪吗?我的意思是,为什么它不能按列工作?

4

2 回答 2

2

因为这部分查询

select 
   random(), 
   random(),
   random()

正在为一行生成三个随机数!

于 2013-06-13T18:07:13.890 回答
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

但我不知道这有多可靠。

于 2013-06-13T20:58:58.357 回答