zoukankan      html  css  js  c++  java
  • sql 184. 部门工资最高的员工

    Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。

    +----+-------+--------+--------------+
    | Id | Name | Salary | DepartmentId |
    +----+-------+--------+--------------+
    | 1 | Joe | 70000 | 1 |
    | 2 | Henry | 80000 | 2 |
    | 3 | Sam | 60000 | 2 |
    | 4 | Max | 90000 | 1 |
    +----+-------+--------+--------------+
    Department 表包含公司所有部门的信息。

    +----+----------+
    | Id | Name |
    +----+----------+
    | 1 | IT |
    | 2 | Sales |
    +----+----------+
    编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。

    +------------+----------+--------+
    | Department | Employee | Salary |
    +------------+----------+--------+
    | IT | Max | 90000 |
    | Sales | Henry | 80000 |
    +------------+----------+--------+

    select 
        d.Name as Department,
        e.Name as Employee,
        e.Salary 
    from 
        Employee e,Department d 
    where
        e.DepartmentId=d.id 
        and
        (e.Salary , e.DepartmentId) in (select max(Salary),DepartmentId from Employee group by DepartmentId);

    此次学到的用法为把查询到的结果当做另一次查询的条件

    另一个答案为

    select 
    t.Name as Department,
    e.Name as Employee, 
    e.Salary as Salary
    from(
        select DepartmentId, 
            d.name as Name ,
            max(Salary) as Salary from Employee  e
        join Department d on d.Id = e.DepartmentId 
        group by DepartmentId) as t
    join Employee e
    on t.DepartmentId = e.DepartmentId and e.Salary = t.Salary

    由此答案可得出select后的结果可给别的select当源,但个数必须匹配

  • 相关阅读:
    递归方程(续)
    递推方程
    协方差简单介绍
    排列组合
    牛顿法
    jquery常用方法总结
    RegExp的test()方法
    localStorage用法总结
    正则表达式
    登录页面按回车键实现登陆效果
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/11079105.html
Copyright © 2011-2022 走看看