使用每个更新行的不同随机值更新表

时间:2016-05-10 21:27:01

标签: sql database postgresql random

我想在Postgres中更新表的随机20%值,我想为此属性分配旧属性+具有特定限制的随机数,我希望每行的这个随机数必须不同。< / p>

我目前正在这样做:

update tab_ex
set val = (SELECT val + (SELECT random()*2000 FROM generate_series(20,2000) LIMIT 1))
where id in (select id from tab_ex order by random() limit (select count(*)*0.2 from tab_ex));

并且它正在更新我的表的20%,但它正在使用每行的特定随机数进行更新,而不是为每次更新更改此随机数。

1 个答案:

答案 0 :(得分:1)

我在其他数据库中看到了这个问题,其中子查询得到了优化而且#34;即使它有一个易变的功能。这可能发生在这里。一种可能性是删除子查询:

update tab_ex
    set val = val + random() * 2000
    where id in (select id
                 from tab_ex
                 order by random()
                 limit (select count(*)*0.2 from tab_ex)
                );

对于每个要更新的行,这应该重新运行random()

相关问题