Kev*_*n Q 8 random postgresql stored-procedures plpgsql stored-functions
我需要在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;
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话
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;
Run Code Online (Sandbox Code Playgroud)
称呼:
SELECT x.unique_rand_1001();
Run Code Online (Sandbox Code Playgroud)
数字通过 变得唯一GROUP BY。我生成的数字是所需数字的两倍,以提供足够的数字,以防重复项被删除。根据任务的给定维度(最多 1001 个数字中的 8 个),剩余数字不足的可能性在天文数字上是不可能的。最坏的情况:返回观众数量。