2014-10-06 75 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