题:员工表有员工名称,部门ID,和薪水,通过SQL求出每个部门最高薪水的员工的名称

--同一部门可能有两个或两个以上员工的薪水一样且最高.

SQLSERVER2005中的实现如下:

  SELECT 员工名称,部门ID,薪水 FROM 员工,(SELECT 部门ID AS DepartmentID,MAX(薪水)AS MAX_Salary FROM 员工 GROUP BY 部门ID) AS T
WHERE
员工.部门ID=T.DepartmentID AND 员工.薪水=T.MAX_Salary
ORDER BY 员工.部门ID

======================================
在SQLSERVER2005自带的数据库Pubs中也有一个employee表,但是字段跟上述题目不同,可以这样假设,找出employee 表中各job_id中job_lvl最高的员工的fname.
  --其实现如下:

  SELECT fname,[job_id],[job_lvl] AS MAX_job_lvl_in_job_id
  FROM [employee],
  (SELECT [job_id] AS jobid, MAX([job_lvl])AS mx_lvl FROM [employee] GROUP BY [job_id]) AS T
  WHERE
  [employee].[job_lvl]=T.mx_lvl
  AND
  [employee].[job_id]=T.jobid
  ORDER BY [employee].[job_id]

======================
两个实现的方法是一样的.由于数据量小,所以没有考虑性能的问题.

相关文章: