如何从表的每个组中删除90%的记录(postgres)

时间:2018-11-09 10:38:25

标签: sql postgresql

我在postgres中有一个名为“ sales”的表,其中有一个名为“ region”的列。我试图找到一种方法,从同一张表的每个“区域”中删除90%的记录。

我正在使用以下查询。但是在postgres中同样无法正常工作,并且该表没有主键/唯一键列

ODS_Load_Date

谁能对此提供更好的解决方案。

1 个答案:

答案 0 :(得分:0)

如果表中有唯一的ID,则可以执行以下操作:

delete
    from t
    using (select t.*,
                  row_number() over (partition by region order by region) as seqnum,  -- I always include order by
                  count(*) over (partition by region) as cnt
           from t
          ) tt
    where t.id = tt.id and
          tt.seqnum < 0.9 * cnt;