gpt4 book ai didi

postgresql - 在 PostgreSQL 中生成多行随机数组?

转载 作者:行者123 更新时间:2023-11-29 12:07:41 31 4
gpt4 key购买 nike

为了测试数据库,我想生成许多行,每一行都包含一组随机数的固定长度数组。我可以轻松生成 n 行随机数:

select round(random()*10) from generate_series(1,5);

我可以生成一个随机数数组:

select array(select round(random()*10) from generate_series(1,5));

但是如果我将它们放在一起,array() 子查询只会执行一次:

select array(select round(random()*10) from generate_series(1,5)) from generate_series(1,5);

array
--------------
{10,8,1,7,4}
{10,8,1,7,4}
{10,8,1,7,4}
{10,8,1,7,4}
{10,8,1,7,4}
(5 rows)

如何让子查询针对每一行运行?

最佳答案

我使用函数:

create or replace function random_int_array(int, int)
returns int[] language sql as
$$
select array_agg(round(random()* $1)::int)
from generate_series(1, $2)
$$;

select random_int_array(10, 5)
from generate_series(1, 5)

random_int_array
------------------
{3,8,4,7,5}
{0,10,3,5,4}
{2,2,0,2,10}
{8,1,4,3,9}
{7,4,1,3,6}
(5 rows)

请注意,该函数应该是可变的。


更新。另一种方法,生成 25 个随机值并将它们聚合成 5 组:

select array_agg(round(random()* 10))
from generate_series(1, 25) i
group by i % 5

db<>fiddle.

关于postgresql - 在 PostgreSQL 中生成多行随机数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530591/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com