DAY1
考完试之后就没有接触过数据库了
打一下卡~
今天觉得比较有收获的就是
以下题目:
如何查找第N高的数据
思路一:
1.先找到最大的
select max(distinct 成绩)
from 成绩表
where 课程='语文';
2.然后找到小于最大的最大值
select max(distinct 成绩)
from 成绩表
where 课程='语文' and
成绩 < (select max(distinct 成绩)
from 成绩表
where 课程='语文');
思路二:
用LIMIT和OFFSET
之前没有尝试过LIMIT和OFFSET
涉及语法点为:
select distinct 成绩
from 成绩表
where 课程='语文'
order by 课程,成绩 desc
limit 1,1;
一些特殊情况
题目要求,如果没有第二高的成绩,返回空值,所以这里用判断空值的函数(ifnull)函数来处理特殊情况
ifnull(a,b)函数解释:
如果value1不是空,结果返回a
如果value1是空,结果返回b
select ifnull(第2步的sql,null) as '语文课第二名成绩';
所以最终sql如下:
select ifnull(
(select max(distinct 成绩) from 成绩表
where 成绩<(select max(成绩) from 成绩表 where 课程='语文')
and 课程='语文')
,null) as '语文课第二名成绩';