2015-06-14 44 views
0

我有以下查詢:SQL中刪除基於組由

select user_id, trajectory_id, count(trajectory_id) from point group by user_id, trajectory_id 

返回以下結果: enter image description here

我想從point表中刪除,其中count中產生的表中的所有記錄是< 5 。

現在我有以下查詢,但它不是編譯。它有什麼問題,我該如何解決它?

delete 
from point 
where count(trajectory_id) < 5 
GROUP BY user_id, trajectory_id 

我正在使用Postgres。

+0

你用什麼數據庫引擎? –

回答

3
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 
+1

@Bob:查詢的語法在Postgres中是不允許的。你爲什麼接受這個答案? – klin

1

我會用一個簡單的相關子查詢做到這一點:

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 
            );