当前位置: 首页 > news >正文

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

为什么80%的码农都做不了架构师?>>>   hot3.png

问题:

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

相关文章:

  • 用shell批量修改类似的文件名
  • 【★】交换层网关协议大总结!
  • 使用vRealize Operations for Horizon,做高效的虚拟桌面系统管理员
  • Tomcat6+JDK6如何加固,解决Logjam attack,
  • Word2007“由于文件许可权错误,Word无法完成保存操作”问题的解决方法
  • Centos压缩解压
  • Linux执行命令常见的英语语句
  • asn1编码格式的解析过程
  • top2
  • 远程连接服务器工具:sshpass
  • U盘安装Debian 6 amd64版本
  • Zabbix调优的几个原则
  • HytrixCommand实践总结
  • 探索iptables BPF模块的悲惨历程
  • cp命令使用和注意
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【前端学习】-粗谈选择器
  • C++类中的特殊成员函数
  • CSS居中完全指南——构建CSS居中决策树
  • Java知识点总结(JavaIO-打印流)
  • JS笔记四:作用域、变量(函数)提升
  • leetcode98. Validate Binary Search Tree
  • Linux gpio口使用方法
  • MySQL几个简单SQL的优化
  • php ci框架整合银盛支付
  • Terraform入门 - 3. 变更基础设施
  • TypeScript迭代器
  • vue总结
  • 成为一名优秀的Developer的书单
  • 第2章 网络文档
  • 二维平面内的碰撞检测【一】
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 排序算法之--选择排序
  • 前端工程化(Gulp、Webpack)-webpack
  • 实战|智能家居行业移动应用性能分析
  • 事件委托的小应用
  • 微信小程序设置上一页数据
  • 小程序测试方案初探
  • 用jquery写贪吃蛇
  • 主流的CSS水平和垂直居中技术大全
  • NLPIR智能语义技术让大数据挖掘更简单
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #FPGA(基础知识)
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计高校学生选课系统
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)库存超卖案例实战——优化redis分布式锁
  • (原創) 未来三学期想要修的课 (日記)
  • (转)大型网站的系统架构
  • (转载)虚函数剖析