首页 > 解决方案 > PostgreSQL - 创建随机百分比?

问题描述

出于测试目的,我需要创建一个具有n随机百分比的 JSONB 对象,以便它们总和为1.0.

显然,非常简单

SELECT jsonb_object(array_agg(ARRAY['prefix_' || n::TEXT, round(random()::NUMERIC, 2)::TEXT])) AS e
FROM   generate_series(1,8) AS n
;

将产生总和不等于 的数字1.0

我希望解决方案要复杂得多,而且我似乎无法解决这个问题。

如何在 PostgreSQL 10 中做到这一点?

标签: postgresql

解决方案


You just have to adjust the values.

You could base your generator on this query:

WITH r AS (
   SELECT random()
   FROM generate_series(1, 8)
)
SELECT random/sum(random) OVER ()
FROM r;

推荐阅读