链接:https://leetcode-cn.com/problems/second-highest-salary/
求解第二高的薪水
一、答案:
SELLECT
IFNULL
((SELECT DISTINCT Salary FROM Employee
ORDER BY Salary DESCLIMIT 1 OFFSET 1) , NULL)
AS SecondHighestSalary ;
二、解题思路:
2.1首先将数据去重 :SELECT DISTINCT Salary FROM Employee
2.2 再将数据按薪水降序排列:SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC
2.3 分页思想是一页只有一条数据,第二高的薪水则在第二页: SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1,1 (也可以用 LIMIT 1 OFFSET 1 代替)
2.4 存在极端情况:没有第二薪水 ,则为空,使用IFNULL函数判断
SELLECT
IFNULL
((SELECT DISTINCT Salary FROM Employee
ORDER BY Salary DESCLIMIT 1 OFFSET 1) , NULL)
AS SecondHighestSalary ;
三、涉及的知识点
3.1 SQL查询语句中的 limit 与offset的区别
limit y 分句表示:读取y条数据
limit x,y 分句表示:跳过 x 条数据 ,读取y条数据
limit y offset x 分句表示 :跳过 x 条数据,读取y条数据
示例-1
limit 10 表示:读取前10条记录
示例-2
limit 2,8 表示:从第3条记录开始,读取8条记录,即3,4,5,6,7,8,9,10
示例-3
limit 8 offset 2 表示:从第3条记录开始,读取8条记录,即3,4,5,6,7,8,9,10
3.2 IFNULL函数
语法:
IFNULL(expression_1 , expression_2); 第一个参数如果不是null,则返回第一个参数 否则,返回第二个参数
示例-1
SELECT IFNULL(1,0); 结果是 1
示例-2
SELECT IFNULL(' ' ,1); 结果是 ' '
示例-3
SELECT IFNULL(NULL , 'ABD456'); 结果是 ABD456