用 sql 查询部门工资最高的员工信息(三种解法)

这篇具有很好参考价值的文章主要介绍了用 sql 查询部门工资最高的员工信息(三种解法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天笔试做了一道简单算法题,一道简单 sql 题,sql 题的大意是分别有员工表和部门表两张表,关联字段是部门id,求每个部门薪资最高的员工的信息,薪资最高有多个人需要全部输出。

解法一

当时我只想到了一种解法

先用子查询查到每个部门的最高工资,然后把用部门id把员工表和部门表关联在一起,最后用部门的最高工资做筛选,完整 sql 如下

select d.name Department, e.name as Employee, e.salary as Salary
from Employee e left join Department d on e.departmentId = d.id
where (departmentId, salary) in (
  select departmentId, max(salary)
  from Employee
  group by departmentId
);

解法二

后来看网上说还有以另一种解法,觉得也挺巧妙,学习了。整体思路跟解法一相同,只是把两个字段的 in 操作换成了一个字段,把父子查询的部门id放在子查询作为筛选条件

select d.name Department, e.name as Employee, e.salary as Salary
from Employee e left join Department d on e.departmentId = d.id
where salary in (
  select max(salary)
  from Employee emp 
  where e.departmentId = emp.departmentId
);

解法三

我根据解法一和解法二想到了一种新的解法,把员工表部门最高薪资子查询结果作为临时表,加入到员工表跟部门表的关联中,形成三表连接,最后用临时表跟员工表的薪资比较就能得到结果了

select d.name Department, e.name as Employee, e.salary as Salary
from Employee e 
left join Department d on e.departmentId = d.id
left join  (
  select departmentId, max(salary) as max_salary
  from Employee emp 
  group by emp.departmentId
) as temp
on temp.departmentId = e.departmentId
where e.salary >= temp.max_salary;

三种算法效率比较

理论上应该是解法一跟解法三的效率差不多,且他们的效率高于解法二。因为解法一和解法三,子查询都只需要执行一次,但是解法二,每行员工表记录都需要关联执行一次子查询,所以效率可能不如其他两个。

参考:sql—部门工资最高的员工文章来源地址https://www.toymoban.com/news/detail-532544.html

到了这里,关于用 sql 查询部门工资最高的员工信息(三种解法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 「SQL面试题库」 No_23 查询回答率最高的问题

    「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。 1.1 活动流程 整理题目 :西红柿每天无论刮风下雨

    2023年04月08日
    浏览(36)
  • Java基础(员工工资管理系统)

    某公司的雇员分为以下若⼲类: SalariedEmployee :拿固定⼯资的员⼯。 HourlyEmployee :按⼩时拿⼯资的员⼯,每⽉⼯作超出 160 ⼩时的部分按照 1.5 倍⼯资发放  SalesEmployee :销售⼈员,⼯资由⽉销售额和提成率决定。3万以下,提成率5%,3万以上提成率8%  BasePlusSalesEmployee :有固

    2023年04月27日
    浏览(36)
  • 想转行做程序员,该怎么选择开发语言?哪个岗位工资最高?

    本文主要针对零基础想了解或者转行从事开发岗的同学。 我们收集了往届毕业同学和一些正在咨询的同学,发现大家在学习初期,对转行互联网做开发,最多的疑问或者顾虑大体分为几类: 现在哪门语言比较火? 学什么语言好找到工作? XX语言是不是饱和了? ... 其实语言

    2024年02月02日
    浏览(63)
  • 员工工资管理系统(JAVA完整课设和详细思路)

    这是一篇基于JAVA的员工工资管理系统的课程设计,编译环境是eclipse。 下面进入正文:       题目:设计员工工资管理系统       实现功能:   1.输入 5 名员工姓名、工号、月工资;                            2.统计每人的年收入及收入最高和最低的员工,计算他们的

    2024年02月03日
    浏览(39)
  • SQL 查询两个时间段是否有交集的情况 三种写法

    mysql 写法 其他一样 数据库的字段 start_time, end_time 输入的字段 a,b 第一种  第二种  第三种  三种结果相同 推荐用第三种  200万数据测试 第一种23秒 第三种19秒 总结起来就一句话:最小值 小于等于 最大值 并且 最大值 大于等于 最小值,则一定有交集。

    2024年01月18日
    浏览(62)
  • SQL 查询表字段信息

    一、MySQL (一)查询所有表名 查询指定数据库下表名 (二)查询表下所有字段 查询指定数据库下表的字段信息 二、Oracle (一)查询表下所有字段 (二)查询库下表字段信息 (三)查询用户下表的外建等信息 (四)oracle查询用户下表外建信息 关注林哥,持续更新哦!!!

    2024年02月12日
    浏览(47)
  • SpringBoot案例-部门管理-查询

    页面原型  需求分析 接口文档链接如下: https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 用户发送请求,交由对应的Controller类进行处理,Controller类调用service实现查询部门功能,对应的service业务层调用对应的mapper接口,通过mapper接口查询数据库执行select * from dept;SQL语句,将查询

    2024年02月13日
    浏览(34)
  • sql中的时间范围查询【三种方式】以及Mapper.xml中遇到大于号小于号问题解决方案

    mapper注意事项 字符 转义字符 描述 gt; 大于 = gt;= 大于等于 lt; 小于 = lt;= 小于等于 \\\" quot; 双引号 ’ apos; 单引号 amp; and 遇到问题: 从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获

    2024年02月10日
    浏览(45)
  • Java 递归查询该部门,及其下属部门,所有用户

    Java 递归查询该部门,及其下属部门,所有用户: 调用方法: 参考:Java 递归查询所有下级部门 - 微酷网 递归查询父级所有下级,查询树形结构_Clackson的博客-CSDN博客_递归遍历所有下级

    2024年02月13日
    浏览(31)
  • 三门问题的三种解法

    今天来讲一个经典的概率论问题: 三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。 问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。 参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车

    2024年02月17日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包