1.有时候 问题没处理(结果不对)
可能是视角问题。
2.求哪些人的薪水在部门的平均薪水之上
1)求部门的平均薪水薪水
select deptno,avg(sal) as avgsal from emp group by deptno;
+--------+-------------+
| deptno | avgsal |
+--------+-------------+
| 10 | 2916.666667 |
| 20 | 2175.000000 |
| 30 | 1566.666667 |
+--------+-------------+
2) 将以上的查询结果作为一张临时表T,t和emp表连接,条件:t.deptno=e.deptno and e.sal>t.avgsal;
select ename,t.* from emp e
join (select deptno,avg(sal) as avgsal from emp group by deptno) t
on t.deptno=e.deptno and e.sal>t.avgsal;
结果:
+-------+--------+-------------+
| ename | deptno | avgsal |
+-------+--------+-------------+
| ALLEN | 30 | 1566.666667 |
| JONES | 20 | 2175.000000 |
| BLAKE | 30 | 1566.666667 |
| SCOTT | 20 | 2175.000000 |
| KING | 10 | 2916.666667 |
| FORD | 20 | 2175.000000 |
+-------+--------+-------------+
这里 是维度没给全,代码是这样写的,只不过前面少些了一个e.sal
所以怎么都发现不了问题:
你的着眼点是对的 ,只是维度给少了,还不自知。
下面把e.sal 加上
正确做法
select ename,e.sal,t.* from emp e
join (select deptno,avg(sal) as avgsal from emp group by deptno) t
on t.deptno=e.deptno and e.sal>t.avgsal;
正确结果:
+-------+---------+--------+-------------+
| ename | sal | deptno | avgsal |
+-------+---------+--------+-------------+
| ALLEN | 1600.00 | 30 | 1566.666667 |
| JONES | 2975.00 | 20 | 2175.000000 |
| BLAKE | 2850.00 | 30 | 1566.666667 |
| SCOTT | 3000.00 | 20 | 2175.000000 |
| KING | 5000.00 | 10 | 2916.666667 |
| FORD | 3000.00 | 20 | 2175.000000 |
+-------+---------+--------+-------------+
心得体会与君共勉:
就是这些犯错啊这些才总结了这些经验,你才得到了这些新的知识,如果不犯错也就相当于拿着答案在抄,这对你没有任何意义,你就是需要这些总结,这种经验错误,你才能成为高手。