首页 > 解决方案 > 如何在 postgres 的关联表上生成随机数据?

问题描述

我有两个表:用户和结果。一个用户有很多结果。

我需要在我们的用户表中生成 1000 万条记录,而我能够使用generate_seriespostgres 中的函数来做到这一点。

现在,我想在结果表中生成数百万行。但我希望这些行有一定的分布。例如,我希望 50% 的用户只有 1 个结果。我希望 40% 有 2 个结果。我希望 10% 有 5 个结果。

有没有办法在 postgres 的结果表中生成这个随机数据?

标签: sqlpostgresqlgenerate-series

解决方案


是的:

select u.user_id, gs.result
from (select u.*,
             ntile(10) over (order by rand()) as decile
      from users u
     ) u cross join lateral
     generate_series(1, (case when u.decile <= 5 then 1 when u.decile <= 9 then 2 else 5 end)) gs(result);

这会生成行。您可以填写您想要的数据。


推荐阅读