sql 根据分组删除
sql delete based on group by
我有以下查询:
select user_id, trajectory_id, count(trajectory_id) from point group by user_id, trajectory_id
它returns结果如下:
而且我想删除 point
table 中的所有记录,其中 count
在生成的 table 中小于 5。
现在我有以下查询,但它没有编译。它有什么问题,我该如何解决?
delete
from point
where count(trajectory_id) < 5
GROUP BY user_id, trajectory_id
我正在使用 Postgres。
delete p1
from point p1
join
(
select user_id, trajectory_id
from point
group by user_id, trajectory_id
having count(trajectory_id) < 5
) p2 on p1.user_id = p2.user_id
and p1.trajectory_id = p2.trajectory_id
我会用一个简单的相关子查询来做到这一点:
delete from point
where (user_id, trajectory_id) in (select user_id, trajectory_id
from point
group by user_id, trajectory_id
having count(*) < 5
);
上面接受的答案有一些语法错误,下面应该可以解决问题,
delete
from point p1
using
(
select user_id, trajectory_id
from point
group by user_id, trajectory_id
having count(trajectory_id) < 5
) p2
where p1.user_id = p2.user_id
and p1.trajectory_id = p2.trajectory_id
我有以下查询:
select user_id, trajectory_id, count(trajectory_id) from point group by user_id, trajectory_id
它returns结果如下:
而且我想删除 point
table 中的所有记录,其中 count
在生成的 table 中小于 5。
现在我有以下查询,但它没有编译。它有什么问题,我该如何解决?
delete
from point
where count(trajectory_id) < 5
GROUP BY user_id, trajectory_id
我正在使用 Postgres。
delete p1
from point p1
join
(
select user_id, trajectory_id
from point
group by user_id, trajectory_id
having count(trajectory_id) < 5
) p2 on p1.user_id = p2.user_id
and p1.trajectory_id = p2.trajectory_id
我会用一个简单的相关子查询来做到这一点:
delete from point
where (user_id, trajectory_id) in (select user_id, trajectory_id
from point
group by user_id, trajectory_id
having count(*) < 5
);
上面接受的答案有一些语法错误,下面应该可以解决问题,
delete
from point p1
using
(
select user_id, trajectory_id
from point
group by user_id, trajectory_id
having count(trajectory_id) < 5
) p2
where p1.user_id = p2.user_id
and p1.trajectory_id = p2.trajectory_id