我正在使用PostgresSQL。我有以下gps点表的结构:
正如您可以看到id = 551071
和551073
以及551075
具有相同坐标的点。我想删除它们,所有3点。但问题是我有一个600K对象的数据集,我想删除所有用户的所有重复坐标。这意味着我想从用户10
中删除这三个点。如果用户11
也具有相同的坐标,则无需删除。我怎么能这样做?
答案 0 :(得分:4)
您可以使用在聚合子查询上应用的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)