nan*_*nue 3 random postgresql lateral-join
我想执行几次(假设 30 次)涉及随机数的“实验”
我的方法是:
select
rnd
from
generate_series(0,30) as l, -- number of times
lateral (
select random() as rnd -- the "experiment"
) as t ;
Run Code Online (Sandbox Code Playgroud)
您可以将其理解为“执行 30 次实验”。
问题是该代码生成了 30 个精确的数字。
请注意:“实验”部分显然更复杂,但在其中的某个地方,它会在每次实验运行时创建数百个随机数。即我想生成数百个随机数,共 30 次。这很重要,因为我知道我可以执行
select random() from generate_series(0,30)
Run Code Online (Sandbox Code Playgroud)
并获得 30 个不同的随机数,但这不是我打算做的。
您的问题是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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |