postgresql - 在 postgresql 的循环内生成随机数
问题描述
我想执行几次(比如说 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 个不同的随机数,但这不是我打算做的。
解决方案
你的问题是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;
推荐阅读
- css - 在 css-template 中使用“fr”符号在 Firefox 82.0 中不起作用
- c++ - 从函数 C++ 返回 C 样式字符串
- mysql - 有什么方法可以永久为 mysql 列加上别名吗?
- react-native - ldisplayDetailForFilm 不是函数。(在“displayDetailForFilm)”中,“displayDetailForFilm”未定义
- html - 你如何给阴影一个图案?
- javascript - 使用 Javascript 复制富编辑器的内容
- wordpress - 如何从 wordpress 帖子中获取图片 url
- javascript - 使绝对定位的背景图像具有响应性
- php - 找出在 CodeIgniter 中加载助手的位置
- postgresql - 测试配置文件的 Spring Boot 运行飞行方式迁移