把底薪低于公司平均底薪的员工,底薪增加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子句不能用聚合函数

0

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函数是不合法的


我是这样理解的,如果有错误望指正

0

weixin_慕哥5362328

2020-05-25

老师的t.avg是表示t表中的avg,他的avg是给求平均的那个查询起的别名,而同学的avg是在where后面使用了聚合函数求算平均值……

0

时间,

2020-04-13

同学,你好。where后面不能使用“聚合函数”,因此会报错。同学可以根据老师的讲解来写,先得到公司的平均值放到临时表中并与t_emp表做连接

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

0

0 学习 · 2669 问题

查看课程