postgresql:how 添加一列并平均插入具有三个相同值的行

postgresql:how to add a column and insert rows with three same values equally

我在 greenplum 中得到一个数据集(它运行 postgresql sql 语法)并且需要添加一个日期类型值的列(对于 SAS,但是我们不能使用 SAS 数据步骤) 具有三个 date:20170101,20170601,20171101 并且这些值中的每一个都具有所有行的 1/3。

这是一种随机分配值的方法:

select (case row_number() over (order by random()) % 3
            when 0 then '2017-01-01'::date
            when 1 then '2017-06-01'::date
            when 2 then '2017-11-01'::date
        end) as dte
from t;

注意:简单地 运行:

会更快
select (case (random() * 3)::int
            when 0 then '2017-01-01'::date
            when 1 then '2017-06-01'::date
            when 2 then '2017-11-01'::date
        end) as dte
from t;

但是,使用 row_number() 可以保证三个日期之间的平衡(根据行数尽可能接近)。