题目:显示部门平均工资的最大值和该部门编号?
1.上面的代码报错的原因?首先要理解sql的执行顺序
1.通过from子句中找到需要查询的表
2.通过where 子句进行非分组函数筛选判断
3.通过croup by子句完成分组操作
4.通过having子句完成组函数筛选判断
5.通过select 子句选择显示的列或表达式及组函数
6.通过order by子句进行排序操作。
2.再来理解上面的错误的sql ,
1.首先执行了group by 将出师表分成了以部门编号分组的表(例如部门编号10. 20.30, 编号10的部门包含了整个编号为10的编号的所有员工的薪水)
2.再执行select 中的deptno 编号 显示了三个分组(例如 10.20.30)
3.再执行select 中的avg(sal)建立了每个部门的平均工资的一个新表。(例如:10 2100)
4.最后再执行max()函数,表示的意思是根据部门,筛选每个部门的最大值,但是上一步执行中形成的表只有平均值,并没有部门中每个员工的具体的薪资,所有sql 执行编译错误。
2.辅助理解 为什么这样写能执行
步骤解析:
1.先执行分组,以部门分组,(例如10.20.30)
2.再执行select中的avg(sal),得出的新表包含的就是每个部门的平均值。例如(10.2000 20. 6000 30 8000)
3.执行select 中的max(),因为前面并没有包含除了分组函数以外的单独字段,所以得出的结果三个部门平均值中的最大值,所以执行结果如上图所示
3.下面写几种方法得出题目的结果的示例
示例1
示例2