MySql基础34题写题记录(3-10)
3、取得部门中(所有人的)平均的薪水等级,如下:
select avg(d_grade),deptno from (select d.grade d_grade,e.ename,e.deptno
from emp e join salgrade d on e.sal between d.losal and d.hisal) a
group by deptno;
4、不准用组函数(Max),取得最高薪水(给出两种解决方案)
5、取得平均薪水最高的部门的部门编号(至少给出两种解决方案)
开始的时候没有给查询出来的表起名字,因此发生错误:
select
max(avg_sal),deptno
from
(select deptno,avg(sal) avg_sal
from
emp
group by
deptno) a
6、取得平均薪水最高的部门的部门名称
当时的问题是,需不需要再进行分组,经过显示是正确的,这里应该是再得到子查询表的时候就进行了分组,因此不用在查询的时候继续进行分组
Select
d.dname,max(a.avg_sal)
from
dept d
join
(select deptno,avg(sal) avg_sal
from
emp
group by
deptno) a
on
d.deptno = a.deptno;
7、求平均薪水的等级最低的部门的部门名称
第三题得到了每个部门的平均薪水等级,在此基础上查到最低的薪水等级对应的部门名称
Select min(a_avgsal),d.dname
From (select avg(d_grade) a_avgsal,deptno from (select d.grade d_grade,e.ename,e.deptno
from emp e join salgrade d on e.sal between d.losal and d.hisal) a
group by deptno) a
join dept d
on a.deptno = d.deptno;
8、取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的 领导人姓名
这里需要注意是员工代码没有在mgr字段上出现,而不是员工职务是manager
Select ename
From emp
Where job = ‘manager’ and sal > (select max(sal) from emp where job != ‘manager’);
所以需要推翻重写
先找员工代码不是mgr的最高薪水
Select max(e.sal)//原因在于没有指定求e中的最大sal
From emp e
Join emp a
Where e.empno != a.mgr
再找大于最高薪水的领导人
Select e.ename,e.sal
From emp e
Join emp a
Where e.empno = a.mgr and e.sal > (Select max(e.sal)
From emp e
Join emp a
Where e.empno != a.mgr);
发生错误:Column 'sal' in field list is ambiguous,进一步找到该错误是出现在第一步中,原因在第一句
但是仍然不对,运行第一个代码,查询名字,发现得到了很多名字,也就是在每一列等会进行查询,再输出每一列不一样的,也就是笛卡尔积,这样相当于所有的人都被输出来了,所以第一步得到的最大工资是5000
最后采用先查出所有领导人编号,再看编号是否在里面,使用not in 的方式得出
Select max(sal)
From emp
Where empno not in (select distinct mgr from emp where mgr is not null )
然后找到高于这个薪资的
Select e.ename,e.sal
From emp e
Where e.empno in (select distinct mgr from emp where mgr is not null ) and e.sal > (Select max(sal)
From emp
Where empno not in (select distinct mgr from emp where mgr is not null ));
9、取得薪水最高的前五名员工
Limit的位置似乎是放在最后的,开始的时候放错了,放到select后面去了
Select sal
From emp
Order by sal desc limit 5;
10、取得薪水最高的第六到第十名员工
Limit的正确语法是limit 5,5 //注意空格和不要括号
Select sal
From emp
Order by sal desc limit5,5;