常见SQL考题:TOPK工资与中位数工资

本文通过分析LeetCode中的三道SQL题目,探讨如何在SQL中找到第二高薪水、部门前三高薪水以及不同公司员工的中位数工资。主要逻辑涉及排序、分组、别名及自定义变量等技巧,同时讨论了特殊情况的处理,如并列值和中位数计算。
摘要由CSDN通过智能技术生成

可以忽略的部分

  • 吐槽:SQL的题目在逻辑上并不会特别复杂,但是因为SQL语句只有那么几个函数,而且符号系统相对其他语言比较陌生,导致我们经常不知道如何下手
  • 不熟悉sql语句功能的可以先看菜鸟教程
  • 总的来说,SQL题目比较偏向于让我们从主要逻辑到实现,到特殊情况判断的逐层分析

三个相关题目

leetcode 176 第二高薪水

  • 题目大意:从Employee表中选出第二高薪水数额(去掉并列)
  • 主要逻辑:第二高如何获取?排序,取第二位
  • 实现:如何取第二位?
    • 返回的表都是从第一行开始返回的,因此需要使用offset 1对返回表进行偏移1位
    • 然后去掉后面的所有行,只剩下第二位即可,使用limit 1限制返回行数为1,这里再啰嗦一句,limit num 常用于博客之类的网页中,限制一页能显示的帖子。
  • 特判:公司员工工资都一样,那么第二高工资就是null,因此使用ifnull...null作为判断。
select ifnull(
    (select DISTINCT Salary
    from Employee
    order by Salary desc
    limit 1 offset 1), null
) as SecondHighestSalary;

leetcode 185 部门前三高薪水的所有员工

  • 题目描述:有两个表,第一个表是Employee,包含四个属性,分别是员工idId,员工姓名Name,员工薪水Salary,和员工所在部门idDepartmentId, 表如图
    在这里插入图片描述
    第二个表则是部门表,该表很简单,只包含部门id与部门名称Name
    在这里插入图片描述
  • 逐层分析:
    • 返回格式:此题要求返回部门,员工姓名与员工工资,但是Employee中没有部门名字,只有部门id࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值