删除低于列平均值10%的数据

时间:2020-04-18 09:45:36

标签: sql sql-server tsql sql-delete

如果我有一个包含2列的表,并且我想从表中删除数据,其中表1的数据不在列2平均值的前90%之内

column 1     |   column 2
-------------+----------------
100000.00    |  1000000.00
150000.00    |  1500000.00
180000.00    |  1800000.00

我已经获得了带有代码的平均价值

SELECT AVG([column2*0.1) 
FROM #t

平均值= 143333.333333

但是我很难找到一种将值用作where条件的方法

2 个答案:

答案 0 :(得分:0)

您可以使用子查询或cte执行此操作:

with cte as (select column1, avg(column2) over() avg_column2 from mytable)
delete from cte where column1 < avg_column2 * 0.1

答案 1 :(得分:0)

如果我正确理解了您的问题,也许可以为您提供帮助:

DECLARE @column2Avg decimal;

SELECT @column2Avg = AVG([column2]) 
FROM #t

DELETE FROM #t
WHERE column1 < @column2Avg*0.1

当然,您应该使用Transaction子句将其包装起来。