一道经典SQL笔试题(求各部门最高薪水的部门名称、员工姓名以及薪水)

我前两天写了一篇标题一样的博客,有道友评论说我的写法有问题,当时脑子一蒙就被带偏了,以为自己写错了,就把原来的删除了,结果下来验证了一下自己的写法还是没有问题,所以这次补上。

题是这样的:

有两个表,一个部门表,一个员工表,求各部门最高薪水的部门名称、员工姓名以及薪水(不去重)。

部门表
ID Name
1 IT
2 Sales
员工表
ID Name Salary DepartmentID
 1 Joe 7000 1
2 Jim 9000 1
3 Henry 8000 2
4 Sam 6000 2
5 Max 9000 1

 

 

 

 

SQL如下:

SELECT
    d.`Name` DepartmentName,
    b.Salary,
    b.`NAME`
FROM
    department d,
    (
        SELECT
            emp.DepartmentId DepartmentId,
            emp.`Name` NAME,
            emp.Salary
        FROM
            employee emp,
            (
                SELECT
                    MAX(e.Salary) maxSalary
                FROM
                    employee e
                GROUP BY
                    e.DepartmentId
            ) t
        WHERE
            emp.Salary = t.maxSalary
    ) b
WHERE
    b.DepartmentId = d.ID

查询结果:

查询结果
DepartmentName Salary Name
IT 9000 Jim
Sales 8000 Henry
IT 9000 Max

 

 

 

 

 

当然还有更好的写法,希望大神指教,多谢。

 

你可能感兴趣的:(技术原创)