postgresql:如何添加列并同等地插入具有三个相同值的行

时间:2017-12-20 01:53:43

标签: sql postgresql sas greenplum

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

1 个答案:

答案 0 :(得分:0)

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

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()可以保证三个日期之间的均衡(尽管给定行数尽可能接近)。