题:员工表有员工名称,部门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]
======================
两个实现的方法是一样的.由于数据量小,所以没有考虑性能的问题.