把底薪低于公司平均底薪的员工,底薪增加150元 这个练习我这么写有什么错?
来源:3-4 课堂作业讲解:UPDATE语句
MasirYXM
2020-04-12 15:44:53
老师写法:
UPDATE t_emp e JOIN
(SELECT AVG(sal) AS avg FROM t_emp) t
ON e.sal < t.avg
SET e.sal = e.sal +150;
我的写法:
UPDATE t_emp e1 JOIN t_emp e2
SET e1.sal=e1.sal+150
WHERE e1.sal < AVG(e2.sal);
4回答
圣诞妈妈
2020-06-08
前面章节有讲到WHERE子句不能用聚合函数
coffeehyh
2020-06-01
同学的写法错在聚合函数 AVG的位置上,AVG 等聚合函数是在将表中符合条件的数据筛选出来后再执行的一类函数。
可以参考前面查询语句中各子句的执行顺序,
FROM --> WHERE --> GROUP BY --> SELECT --> ORDER BY --> LIMIT
在这里,AVG只有在GROUP BY 分组完成后才会执行,所以AVG不能放在WHERE子句里面,因为会产生冲突
同理,更新操作里面,执行顺序是:
UPDATE --> WHERE --> ORDER BY --> LIMIT --> SET
其中,属于选择出目标记录(即要执行修改操作的记录)之前的子句包括 除了SET子句以外的所有子句
因此直接在这些地方使用AVG函数是不合法的
我是这样理解的,如果有错误望指正
weixin_慕哥5362328
2020-05-25
老师的t.avg是表示t表中的avg,他的avg是给求平均的那个查询起的别名,而同学的avg是在where后面使用了聚合函数求算平均值……
时间,
2020-04-13
同学,你好。where后面不能使用“聚合函数”,因此会报错。同学可以根据老师的讲解来写,先得到公司的平均值放到临时表中并与t_emp表做连接
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
相似问题