Leetcode题解之database(十)177. Nth Highest Salary

今天要解的是:177. Nth Highest Salary(求第N高的工资)。

这里要注意这样一句话👇:
在这里插入图片描述
如果没有第N高的工资,就要输出NULL。

  • 首先看此题考察的知识点:IFNULL(判断空值)函数用法和LIMIT用法。

  • 其实这题可以说是👉 176. Second Highest Salary (求第二高工资) 的升级版。建议大家先看看第二高的题解会更易懂这题。

  • 解题思路👉:此题要求第N高,那么重点就在N这个数字上
    第一种情况,N不为0的时候:假如N=1,那就是第一高,也就是索引为0(N - 1)的值;假如N=3,那就是第三高,即索引为2的值。
    但是要注意一个特殊的情况❗👉那就是N = 0的时候,此时没有最值;这就是题目说的第二种情况,此时需要返回NULL。
    所以这题也就演变成了一个判断N是否为NULL的题,而我们所熟知的可以解决这个判断问题的函数就是IFNULL函数

  • 下面提供几个参考解法

    • 第一个解法:IFNULL 函数+ LIMIT函数。
      在这里插入图片描述
      该解法最易懂,且简洁。不过这里要注意!!!记得先声明变量m 为INT,并把N-1 赋值给 m,才不会报错。
    • 第二种解法:使用窗口函数的DENSE_RANK() 方法。
      在这里插入图片描述
      此法也好懂,首先对salary按降幂排序,然后把生成的序号列作为新字段 num ;只要N 等于窗口t 里面的num,则找到第N高的工资。
    • 第三种解法:逆向思维,如果要取第N高的工资,反过来想👉就是找这前N个工资里面最小的那个。 比如我们要取第3高的工资👉(eg:10000,9000, 8000, 7000, 6000 五个工资数)就先找到前三的工资(即10000,9000, 8000)这个表,最后从该表取最小那个(8000)就是第三高的工资。
      当然这里也要注意,如果N个数不满足时返回NULL的情况(即只有两个工资数,但是我们要取第三高;那么就会返回NULL) 所以这里也需要一个IF来比较前N个数 count 和 N的大小。
      在这里插入图片描述

好啦,这题就到这里吧,下一篇把这个类似的几类题做个汇总小结😁。

参考资料:
力扣-数据库之177题 题解区

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值