2014-10-06 45 views
1

删除其薪水小于教官如何删除元组作为低于平均水平的薪水?

的平均工资,如果我用下面的MySQL的所有导师:

delete from instructor 
where salary< (select avg (salary) from instructor); 

如果我们使用上面的SQL,它会导致一个问题:当我们删除来自存款的元组,平均工资变化

那么如何实现呢?

我有一个想法,

  1. 首先,计算平均工资,发现所有元组删除
  2. 接下来,删除上面找到的所有元组(不 重新计算平均或复检的元组)

但是当我实现这个: 它总是在工作台上显示错误与MySQL

delete 
from (select* 
    from instructor 
    where salary < (select avg(salary) from instructor)) as A 

任何人都可以帮我解决它吗?

回答

3

您可以将平均值存储到变量中。

set @average = (...) 
delete from instructor where salary < @average 

或者,如果你希望它是在一个单一的查询:

delete from instructor 
cross join (SELECT avg(salary) as average from instructor) t 
where salary < average; 
+0

+1,对于交叉连接,但你不 – radar 2014-10-06 23:37:32

+0

@Rajesh推倒需要组正在做内部联接时在我改变交叉连接之后,我有群组通过..forgot删除它 – Steve 2014-10-06 23:38:06

+0

Thx〜在MySQL中使用** set **是个好主意,顺便说一下,我的实现有什么问题?首先,我选择所有的元组,如果薪水低于平均水平,然后删除所有那些我选择 – Jie 2014-10-06 23:39:25