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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值