如何从一行中删除重复的值

时间:2019-01-04 06:45:32

标签: sql postgresql greatest-n-per-group

我有一个像这样的数据集:

order_id | order_item_id | category
1        | 1             | book
1        | 2             | pen
1        | 3             | book

现在,我必须删除order_item_id及其在类别列上具有重复值的行,但仍保留其中之一。我该如何实现?

3 个答案:

答案 0 :(得分:0)

从不存在order_item_id的mytable中删除(按order_ID,类别从mytable组中选择max(order_item_id)

答案 1 :(得分:0)

如果行order_idcategory相同但行order_item_id较少,则删除:

delete from orders o
where exists (
  select 1 
  from orders 
  where 
    orders.order_id = o.order_id
    and
    orders.category = o.category
    and 
    orders.order_item_id < o.order_item_id
  );

请参见demo

答案 2 :(得分:0)

我会简单地做:

delete from t
    where t.order_item_id > (select min(t2.order_item_id)
                             from t t2
                             where t2.order_id = t.order_id and
                                   t2.category = t.category
                            );