数据库 第二高的薪水

74 阅读1分钟

176. 第二高的薪水 - 力扣(LeetCode)

第一个写法

1.首先我们对成绩进行一个去重:

distinct 成绩

2.然后我们找出最高成绩

max(成绩)

3.通过嵌套找出第二高成绩

select max(distinct 成绩) 
from 成绩表
where 课程='语文' and
      成绩 < (select max(distinct 成绩) 
              from 成绩表 
              where 课程='语文');

code

image.png

第二个写法 limit offset

limit的使用场景:限制返回数据的条数

例如下面:

    select* from table LIMIT 9;     //从第1行开始,检索前 9个记录行,显示9条数据,共显示id为1....9

    等价于select* from table LIMIT 09;     //从第1行开始,检索前 9个记录行,显示9条数据,共显示id为1....9

    select* from table LIMIT 2,10;--检索从第3行开始,累加10条记录,共显示id为3....12

    select* from table LIMIT 6,10;--检索从第7行开始,累加10条记录,共显示id为7,8...16

    select* from table LIMIT 10,5;--检索从第10行开始,累加5条数据,共显示id为11,12...15

那么本题我们可以先对salary降序排序,然后再用limit 1,1来表示从第2行查询一行。

image.png

特殊情况

题目中说了:如果没有第二高成绩就返回NULL,因此我们需要用ifNull()函数来判空。

ifNull(a,b)表示,如果不为空就返回a,否则就返回b。

我们把a设为正常查询语句,b设为NULL值即可。