【问题标题】:Generate random inside a loop in postgresql在 postgresql 的循环内生成随机数
【发布时间】:2019-08-04 22:16:03
【问题描述】:

我想执行几次(比如说 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】:

    你的问题是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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多