Можно сделать удаление с помощью предложения HAVING?
Я хочу сделать что-то вроде ниже:
DELETE UserPredictions
GROUP BY UserId
HAVING COUNT(*) < 500
Но я получаю синтаксическую ошибку. Возможно ли вообще сделать удаление с предложением HAVING в SQL Server или мне нужно будет перевести счетчики в CTE и выполнить удаление с помощью соединения?
Ответы
Ответ 1
На самом деле, нет. Предложение having подразумевает агрегацию, что означает, что у вас больше нет исходных строк.
Я думаю, вы хотите следующее:
DELETE from UserPredictions
where UserId in (select UserId from UserPredictions group by UserId having count(*) < 500)
Ответ 2
Вы можете использовать объединенный подсегмент в инструкции DELETE
:
DELETE a
FROM UserPredictions a
JOIN
(
SELECT UserId
FROM UserPredictions
GROUP BY UserId
HAVING COUNT(1) < 500
) b ON a.UserId = b.UserId
Ответ 3
Попробуйте этот вложенный запрос:
DELETE FROM UserPredictions
WHERE UserId IN (SELECT UserId
FROM UserPredictions
GROUP BY UserId
HAVING COUNT(*) < 500)
Ответ 4
Я не думаю, что это возможно, но вы можете попробовать это
Обновление: 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