为了测试数据库,我想生成许多行,每行包含一组固定长度的随机数数组。我可以轻松生成 n 行随机数:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { IonicModule } from '@ionic/angular';
import { AlgodetailPage } from './algodetail.page';
const routes: Routes = [
{
path: '',
component: AlgodetailPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [AlgodetailPage]
})
export class AlgodetailPageModule {}
我可以生成一个随机数数组:
select round(random()*10) from generate_series(1,5);
但是如果将它们放在一起,select array(select round(random()*10) from generate_series(1,5));
子查询只会执行一次:
array()
如何使子查询针对每一行运行?
答案 0 :(得分:1)
我使用的功能是
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