表結構:
1、部門表:部門編號,部門名稱,位置
create table dept(
deptno int(10) primary key,
dname varchar(14),
loc varchar(13)
);
2、薪資表:薪資等級、當前等級的最低薪資、當前等級的最高薪資
create table salgrade(
grade int(11),
losal int(11),
hisal int(11)
);
3、員工表:員工編號、名稱、工作崗位、上級編號、錄用日期、工資、獎金、部門編號
create table emp(
empno int(4) primary key,
ename varchar(10),
job varchar(9),
mgr int(4),
hiredate date,
sal double(7,2),
comm double(7,2),
deptno int(2)
);
1、取得每個部門最高薪水的人員名稱
先取得每個部門的最高薪水,組成臨時表,然後與員工表連接得到名稱
select e.ename, t.maxSal from emp e
join (select deptno, max(sal) maxSal from emp group by deptno) t
on e.deptno = t.deptno and e.sal = t.maxSal;
2、哪些人的薪水在部門的平均薪水之上
先取得每個部門的平均薪水組成臨時表,然後與員工表連接得到,注意連接條件
select e.ename, e.sal, t.avgSal, t.deptno from emp e
join (select deptno, avg(sal) avgSal from emp group by deptno) t
on e.deptno = t.deptno and e.sal > t.avgSal;
3、取得每個薪水等級有多少員工
先取得每個員工的薪水等級組成臨時表,然後再按薪水等級分組統計即可。
select t.grade, count(*) from
(select e.ename, s.grade from emp e
join salgrade s
on e.sal BETWEEN s.losal and s.hisal) t
GROUP BY t.grade;