Leetcode-Mysql题目及知识点总结(176. 第二高的薪水)

计算机小白QAQ,因为想找数分岗暑期实习所以充了会员想集中刷一下leetcode的mysql部分。写这个系列博文和大家们交流一下,后面也会持续更新面经准备的一些问题,欢迎同好们一起交流,求大佬轻喷QAQ。因为自己初学也走了很多弯路,所以会尽量写得详细一点,如果可以帮助到后来的朋友们,请各位留言鼓励一下哈哈哈哈。

176.第二高的薪水

这个题在我大概了解了SQL语言的一般用法之后大概有两种思路和大家分享一下,中间会穿插一些知识点。

思路1:我们可以先找到最大的薪水,然后找到比最大的小所有项中最大的也就是第二大的。这个思路主要涉及的知识点就是max函数和where条件过滤,这个比较简单应该写出来大家都能理解。

代码:

select max(salary) SecondHighestSalary

from Employee

where salary<(select max(salary) from Employee)

思路2:利用排序的想法(其实我第一反应是窗口函数row_number来着,但是仔细一想其实order就可以解决,所以这里先不说窗口函数了,在后面再详细介绍)

知识点:1.order by后面加排序的依据,默认情况下是升序排列,加了desc关键字之后改为降序

2.distinct是为了去重,比如说100,100,50如果不用distinct返回的排序结果为100,100,50,但是在很多情况下我们不想考虑并列排名的问题,所以说要用distinct去重,以达到100,50的排序效果

3.limit是为了限制输出,如果是limit 数字N的格式表示输出排序结果前N个,如果是limit n,m的格式则表示输出的是排序结果第n个往后数的m个,不包括n,比如说该问题下是limit 1,1则表示从第一个数之后的第一个输出,也就是第二个。

4.ifnull是mysql中的用法,mssql中用的是isnull,ifnull(x,y)表示如果x不为空则返回x,否则返回y,在该问题中如果不存在第二高的薪水,会直接返回空,为了达到题目的要求所以要在外面再套一层。

 select ifnull((select distinct salary 

from Employee

order by salary desc

limit 1,1),null)as SecondHighestSalary

猜你喜欢

转载自blog.csdn.net/weixin_43167461/article/details/113104312