私は以下のようなことをしたい:
DELETE UserPredictions
GROUP BY UserId
HAVING COUNT(*) < 500
しかし、構文エラーが発生します。SQL Server で HAVING 句を使用して削除を実行することは可能ですか? または、カウントを CTE にロールアップして、結合で削除を実行する必要がありますか?
私は以下のようなことをしたい:
DELETE UserPredictions
GROUP BY UserId
HAVING COUNT(*) < 500
しかし、構文エラーが発生します。SQL Server で HAVING 句を使用して削除を実行することは可能ですか? または、カウントを CTE にロールアップして、結合で削除を実行する必要がありますか?
あまり。having 句は集計を意味します。つまり、元の行はもうありません。
私はあなたが次のことを望んでいると思います:
DELETE from UserPredictions
where UserId in (select UserId from UserPredictions group by UserId having count(*) < 500)
DELETE
ステートメント内で結合された副選択を使用できます。
DELETE a
FROM UserPredictions a
JOIN
(
SELECT UserId
FROM UserPredictions
GROUP BY UserId
HAVING COUNT(1) < 500
) b ON a.UserId = b.UserId
次のネストされたクエリを試してください。
DELETE FROM UserPredictions
WHERE UserId IN (SELECT UserId
FROM UserPredictions
GROUP BY UserId
HAVING COUNT(*) < 500)
私はそれが可能だとは思わないが、あなたはこれを試すことができる
更新:使用することIn
もinner join
できます
Declare @Sample table
(
UserID int,
col2 int
)
INSERT INTO @Sample
SELECT 1,50 UNION ALL
SELECT 1,100 UNION ALL
SELECT 2,150 UNION ALL
SELECT 2,200 union all
Select 4,500
DeLETE FROM @Sample
WHERE UserID IN (SELECT UserID
FROM @Sample
GROUP BY UserID
HAVING COUNT(*) > 1)
Delete O
FROM @Sample O
INNER JOIN
(
SELECT UserID
FROM @Sample
GROUP BY UserID
HAVING COUNT(*) >1
) X
ON O.UserID = X.UserID
私が最初に投稿した答え:
Delete O
FROM UserPredictions O
INNER JOIN
(
SELECT UserID
FROM UserPredictions
GROUP BY UserID
HAVING COUNT(*) <500
) X
ON O.UserID = X.UserID