加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 通过循环在[0,1001]中生成随机数的非重复随机数

发布时间:2020-12-13 16:16:37 所属栏目:百科 来源:网络整理
导读:我需要在plpgsql中生成一个随机数的非重复随机数.非重复数字应落在[1,1001]范围内.但是,代码生成的数字超过1001. directed2number := trunc(Random()*7+1);counter := directed2numberwhile counter 0loopto_point := trunc((random() * 1/directed2number -
我需要在plpgsql中生成一个随机数的非重复随机数.非重复数字应落在[1,1001]范围内.但是,代码生成的数字超过1001.
directed2number := trunc(Random()*7+1);
counter := directed2number
while counter > 0
loop
to_point := trunc((random() * 1/directed2number - counter/directed2number + 1) * 1001 +1);
...
...
counter := counter - 1;
end loop;
如果我明白的话

>您需要一个随机数(1到8)的随机数.
>随机数跨越1到1001.
>随机数必须是唯一的.没有一次出现.

CREATE OR REPLACE FUNCTION x.unique_rand_1001()
RETURNS SETOF integer AS
$body$
DECLARE
    nrnr    int := trunc(random()*7+1);  -- number of numbers
BEGIN

    RETURN QUERY
    SELECT (1000 * random())::integer + 1
    FROM   generate_series(1,nrnr*2)
    GROUP  BY 1
    LIMIT  nrnr;

END;
$body$LANGUAGE plpgsql VOLATILE;

呼叫:

SELECT x.unique_rand_1001();

GROUP BY使数字独一无二.我生成的数字是所需数量的两倍,以便在删除重复项时提供足够的数字.根据任务的给定维度(最多8个1001个数字),天文数据不太可能没有足够的数字.最坏情况:返回查看器编号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读