mysql - 如何删除元组作为工资低于平均水平?

标签 mysql sql average sql-delete

删除所有工资低于教师平均工资的教师

如果我使用下面的 MySQL:

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

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

那么如何实现呢?

我有一个想法

  1. 首先,计算平均工资并找出所有要删除的元组
  2. 接下来,删除上面找到的所有元组(没有 重新计算平均值或重新测试元组)

但是当我实现这个时: 它总是在 Workbench with MySQL 中显示错误

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

谁能帮我解决一下?

最佳答案

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

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

或者如果您希望它在单个查询中:

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

关于mysql - 如何删除元组作为工资低于平均水平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226373/

相关文章:

javascript - 使用 2 个函数和 onchange 事件处理程序计算 5 个数字的平均值

python - 为什么 numpy ma.average 比 arr.mean 慢 24 倍?

javascript - 遍历数组并计算数组部分的平均值

sql - 如何跨多个数据库向sql server中的列添加外键约束?

javascript - 如何让我的查询读取字母(Ñ)

mysql - 将3张表合并为一张,然后使用join语句

mysql - 如何在mysql中加载数据时解决这个错误?

mysql - order by 选择一条记录

mysql - 如果子行匹配多个条件,SQL 获取父行

sql - 如何在 SQL Server 中将数据值捕获为 ^ (...) 的幂?