【sql】部门最高工资 Department Highest Salary

问题:

The Employee table holds all employees. Every employee has an Id, a salary, and there is also a column for the department Id.

+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Henry | 80000  | 2            |
| 3  | Sam   | 60000  | 2            |
| 4  | Max   | 90000  | 1            |
+----+-------+--------+--------------+

The Department table holds all departments of the company.

+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+

Write a SQL query to find employees who have the highest salary in each of the departments. For the above tables, Max has the highest salary in the IT department and Henry has the highest salary in the Sales department.

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

解决:

① 让两个表内交起来,然后将结果表需要的列都标明,然后就是要找最高的薪水,我们用Max关键字来实现。2299 ms

SELECT d.Name Department,e1.Name Employee,e1.Salary Salary
FROM Employee e1 JOIN Department d ON e1.DepartmentId = d.Id
WHERE e1.Salary IN
(SELECT MAX(Salary) FROM Employee e2 WHERE e1.DepartmentId = e2.DepartmentId);/*不能用GROUP BY 对其进行分组。。。*/

② 不用Join关键字,直接用Where将两表连起来。1526 ms

SELECT d.Name Department,e1.Name Employee,e1.Salary Salary
FROM Employee e1,Department d
WHERE e1.DepartmentId = d.Id 
AND e1.Salary
(SELECT MAX(Salary) FROM Employee e2 WHERE e2.DepartmentId = d.Id);/*括号内的条件为e1时,得到的是一组数,为d时,得到的是一个值*/

③ 不用MAX方法而是用>=。 1187 ms

SELECT d.Name AS Department, e.Name AS Employee, e.Salary
FROM Employee e, Department d
WHERE e.DepartmentId = d.Id 
AND e.Salary >= ALL (SELECT Salary FROM Employee e2 WHERE e2.DepartmentId = d.Id);/*使用ALL是因为子查询语句会返回不止一行数据,使用ALL会与返回的每一个数据进行比较*/

SELECT d.Name Department, e1.Name Employee, e1.Salary
FROM Employee e1, Department d
WHERE e1.DepartmentId = d.Id 
AND e1.Salary >= ALL(SELECT Salary FROM Employee e2 WHERE e2.DepartmentId = e1.DepartmentId);

转载于:https://my.oschina.net/liyurong/blog/1570853

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值