数据库结构如下:
TableA: Salary(薪水)
EmpID varchar(10) not null
DepartID varchar(5) not null foreign key references Department(DepartID)
Salary numeric(12) null
TableB: Department(部门)
DepartID varchar(5)
DepartName varchar(50)
TableC: Employee(雇员)
EmpID varchar(10) not null primary key,
EmpName varchar(20) not null
要求:写一个SQL语句,找出薪水为第三高的雇员的名字,所在部门以及薪资。
解答:
为了方便,使用Access创建上面3个表,如图所示(因为是外包工,所以用的日文的office,非亲日!)
数据如图:
思路:
从高到低,取出薪资的前3名,再在这3名中取最小值。
SQL语句如下:
SELECT E.EmpName, S.Salary, D.DepartName --取雇员名字,薪资数,部门名
FROM t_Employee AS E, t_Salary AS S, t_Department AS D
WHERE S.EmpID=E.EmpID
AND S.DepartID=D.DepartID
AND S.EmpID in(
SELECT S.EmpID FROM t_Salary S
WHERE S.Salary in(
SELECT min(S.Salary) FROM t_Salary S --在取出的前3名中取最小值
WHERE S.Salary in(
SELECT TOP 3 S.Salary FROM t_Salary S ORDER BY S.Salary DESC --从高到低取薪资前3名
)
)
)
AND S.DepartID in(
SELECT S.DepartID FROM t_Salary S
WHERE S.Salary in(
SELECT min(S.Salary) FROM t_Salary S
WHERE S.Salary in(
SELECT TOP 3 S.Salary FROM t_Salary S ORDER BY S.Salary DESC
)
)
);
运行结果:
高手飘过,呵呵 :-)