在postgresql中循环生成随机内容

问题描述 投票:1回答:1

我想执行几次(比方说30)一个涉及随机数的“实验”

我的方法是:

select  
  rnd  
from 
  generate_series(0,30) as l,   -- number of times
lateral (
  select random() as rnd -- the "experiment"
) as t ;

您可以将其读作“执行30次实验”。

问题是该代码生成30个确切的数字。

请注意:“实验”部分显然更复杂,但在其中的某个地方,每次实验运行会产生数百个随机数。即我想生成数百个随机数,30次。这很重要,因为我知道我可以执行

select random() from generate_series(0,30)

得到30个不同的随机数,但这不是我打算做的。

postgresql random lateral-join
1个回答
3
投票

你的问题是LATERAL查询不依赖于左表的表达式,所以PostgreSQL只评估它一次。

要为左表表达式中的每一行计算一次,请引入依赖项:

SELECT rnd
FROM generate_series(0,30) as l   -- number of times
CROSS JOIN LATERAL (
   SELECT l.l * 0 + random() AS rnd -- the "experiment"
) AS t;
© www.soinside.com 2019 - 2024. All rights reserved.