如何删除 Postgresql 中的重复行?

How to remove duplicated rows in Postgresql?

我有一个名为 "phone_number_list" 的 table,它的 ID 为 phone_number、org_id、created_at。我正在尝试 运行 一个查询,该查询将为 table 中的每个 org_id 删除重复的 phone_number。谁能帮我这个?我知道如何使用 MySQL 执行此操作,但第一次使用 Postgresql。

试试这个:

delete from your_table where id in 
   (select max(id) from your_table
     group by org_id, phone_number
     having count(1) > 1);

Here's a working sample at DB-Fiddle。一切正常。

这是一个使用 Window 函数的解决方案:

DELETE FROM phone_number_list 
 WHERE id IN 
    (SELECT id FROM 
       ( SELECT id, ROW_NUMBER() OVER 
         (partition BY phone_number, org_id ORDER BY id ASC) AS rnum
         FROM phone_number_list
       ) AS t WHERE t.rnum > 1);