– 1. 取得每个部门最高薪水的人员名称
– (1).in接受参数
select ename "姓名", sal "工资" , deptno "部门编号"
from emp
where sal in(select max(sal)
from emp
group by deptno);
– (2)内连接
select e.ename "姓名", e.sal "工资" , e.deptno "部门编号"
from emp e ,(
select deptno, max(sal) maxsal
from emp
group by deptno
)e1
where (e.deptno = e1.deptno) and(sal = e1.maxsal);
– 2.取得部门中(所有人的)平均的薪水等级
select deptno ,avg(grade)"平均的薪水等级"
from (select e.empno, e.ename,e.deptno,s.grade
from emp e,salgrade s
where e.sal between s.losal and s.hisal)
group by deptno;
–3 不准用组函数(Max),取得最高薪水(给出两种解决方案)
– 第一种 很简单的方法 rownum
select *
from(
select * from emp order by sal desc)
where rownum=1;
–第二种
select *
from emp
where sal not in(
select distinct e1.sal
from emp e1,emp e2
where e1.sal<e2.sal);
– 4取得平均薪水最高的部门的部门编号(至少给出两种解决方案)
– 第一种 使用rownum
select deptno "平均薪水最高的部门"
from(
select avg(sal),e.deptno
from emp e,dept d
where e.deptno = d.deptno
group by e.deptno
order by deptno asc)
where rownum =1;
–第二种:
Select deptno
from emp
group by deptno
having avg(sal) = (
select max(avg(sal)) from emp group by deptno)
–5.哪些人的薪水在部门的平均薪水之上
select e1.ename "姓名",e1.sal "工资",deptno "部门编号"
from emp e1
where sal>(
select avg(sal)
from emp e2
group by deptno
having e1.deptno= e2.deptno
);
–6.取得平均薪水最高的部门的部门名称
select dname "部门名称"
from dept d
-- 根据id 关联两个表
where d.deptno=(
-- 求出的是最高工资的部门编号
select deptno
from emp
group by deptno
having avg(sal)=
(select max(avg(sal))
from emp
group by deptno)
)
–7.求平均薪水的等级最低的部门的部门名称
-- 1.每个部门的平均工资
select avg(sal),deptno
from emp
group by deptno
-- 2.每个部门的平均工资的等级
select t.*,s.grade
from salgrade s ,(
select avg(sal) asal
from emp
group by deptno) t
where t.asal between s.losal and s.hisal;
-- 3.最低部门的编号 和 工资等级
select deptno
from(select t.*,s.grade
from salgrade s ,(
select deptno, avg(sal) asal
from emp
group by deptno) t
where t.asal between s.losal and s.hisal
order by grade asc)
where rownum=1
-- 4.根据部门编号(Id)进行表的关联
select dname
from dept d
where d.deptno=(
select deptno
from(select t.*,s.grade
from salgrade s ,(
select deptno, avg(sal) asal
from emp
group by deptno) t
where t.asal between s.losal and s.hisal
order by grade asc)
where rownum=1);
– 8 取得比普通员工(员工代码没有在mgr字段上出现的) 的最高薪水还要高的经理人姓名
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) maxSal
from emp
where empno not in (Select distinct mgr from emp where mgr is not null))
–9 获得薪水最高的前五名员工
select *
from(
select *
from emp
order by sal desc
)
where rownum<=5;
或者
select *
from(
select rownum r , e.*
from (
select ename,sal
from emp
order by sal desc
)e
where rownum<=5
)
where r>0;
扫描二维码关注公众号,回复:
11759379 查看本文章
–10 取得薪水最高的第六到第十名员工
select *
from(
select rownum ,t.*
from (
select sal "工资",ename "员工"
from emp
order by sal desc
) t
where rownum<=10
)
where rownum<=6;