SQL 查找并删除重复项

SQL find and delete repeated items

我正在使用 PostgresSQL。我的 gps 点结构如下 table:

如您所见,id = 551071551073 以及 551075 的点具有相同的坐标。我想删除它们,所有这 3 点。但问题是我有一个包含 600K 个对象的数据集,我想删除所有用户的所有此类重复坐标。这意味着我想从用户 10 中删除那三个点。如果用户11也有相同的坐标,则不需要删除。我该怎么做?

您可以使用应用于聚合子查询的 exists 运算符:

DELETE FROM my_table a
WHERE  EXISTS  (SELECT   b.lon, b.lat, b.user_id
                FROM     my_table b
                WHERE    a.lon = b.lon AND
                         a.lat = b.lat AND
                         a.user_id = b.user_id
                GROUP BY b.lon, b.lat, b.user_id
                HAVING   COUNT(*) > 1)