Leetcode题解之database(五)176. Second Highest Salary

今天又随手刷了一道leetcode的数据库题,这次是👉:176. Second Highest Salary 求第二高工资。乍看这题是不是觉得似曾相识?没错,之前掌柜写过另外两个题,分别是求部门最高工资的员工求部门工资排前三的员工。其实那两题还稍微难点,因为涉及多表联合查询的;不过这道题看似简单些,里面却有两个坑需要注意避开!!!

掌柜一开始就没注意到,导致提交就报错😂。。。
在这里插入图片描述
上面这个错误❌的解法就是疏忽了第二个坑导致的,下面掌柜马上填坑👇。

  1. 第一个坑就是有可能会出现工资有重复的情况。比如刚好就有两个或三个都是200的工资,那么不去重(DISTINCT)就会得到不止一个第二高工资的数据,这还算是小坑,下面这个才是容易忽略的坑;
  2. 第二个就是有可能出现只有一条工资的情况。 即此时查询第二高的工资还是用掌柜那个查询语句就会出现空值的情况。。。然后就华丽丽地报错了!

所以此题主要考察地知识点👉:IFNULL的用法、临时表、LIMIT子句的使用

那么此题解题思路 其实只要注意上面两个坑就很好想到👇:
所谓第二高工资就是排序后最高工资的下一位,或者是 小于最高工资的集合,集合里面最大的那一位。

下面提供几个参考解法👈:

  • 第一个就是临时表 + LIMIT的方法:
    在这里插入图片描述
  • 第二个就是IFNULL + LIMIT 的方法:
    在这里插入图片描述
  • 第三个就是直接 用MAX函数(其实有点逆向思维的味道🧐) 的方法:
    在这里插入图片描述
  • 最后还是可以用窗口函数的解法来解此题:
    在这里插入图片描述

可以看出来,此题用窗口函数其实略复杂,不太建议;综上几种解法,可知第一种用临时表和LIMIT子句的解法略胜一筹。

PS:leetcode不知何时更新过可以用窗口函数了😁。

通过对176、184、185这三道题的对比可知,它们都可以用窗口函数来解决,所以下次如果再遇到类似的排名、排序这一类SQL问题,可以先考虑窗口函数解法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值