第一个写法
1.首先我们对成绩进行一个去重:
distinct 成绩
2.然后我们找出最高成绩
max(成绩)
3.通过嵌套找出第二高成绩
select max(distinct 成绩)
from 成绩表
where 课程='语文' and
成绩 < (select max(distinct 成绩)
from 成绩表
where 课程='语文');
code
第二个写法 limit offset
limit的使用场景:限制返回数据的条数。
例如下面:
select* from table LIMIT 9; //从第1行开始,检索前 9个记录行,显示9条数据,共显示id为1....9
等价于select* from table LIMIT 0,9; //从第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行查询一行。
特殊情况
题目中说了:如果没有第二高成绩就返回NULL,因此我们需要用ifNull()函数来判空。
ifNull(a,b)表示,如果不为空就返回a,否则就返回b。
我们把a设为正常查询语句,b设为NULL值即可。