求薪水第三高的雇员的SQL题(图解)

Posted on 2007-07-11 09:22  秋雨飘飘  阅读(462)  评论(0编辑  收藏  举报
数据库结构如下:
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语句,找出薪水为第三高的雇员的名字,所在部门以及薪资。
思路:
    从高到低,取出薪资的前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
          )
      )
);

Copyright © 2024 秋雨飘飘
Powered by .NET 8.0 on Kubernetes