从表foo获取随机行。
create table foo as
select generate_series(1,1000000) as val;
' VAL'是串行字段(不是主要字段)。 Field dosn没有休息。
此查询可能返回0,1,2,3,4 ...行,并且在所有行中val具有不同的值。为什么呢?
select * from foo where val =
(floor(random() * (select max(val) from foo))+1)::int;
略微将查询更改为
select * from foo where val =
(select (floor(random() * (select max(val) from foo))+1)::int as v);
按预期结果,表中的单个随机行
答案 0 :(得分:2)
PostgreSQL的随机函数是volatile,这意味着它可以在每次评估时返回不同的值,第一个查询将不同的随机数与表中的每一行进行比较,第二个查询计算单个随机值并比较每个与此相关。
假设你想要一张洗牌的卡片:
select * from deck_of_cards order by random();
或者也许更多你的东西:
select floor(random()*6)+1::int from generate_series (1,6);