LeetCode SQL习题(每天10个)

链接:https://leetcode-cn.com/problems/second-highest-salary/

LeetCode  SQL习题(每天10个)

 

 

 

求解第二高的薪水

一、答案:

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

 

上一篇:MYSQL常用函数1


下一篇:多字段模糊匹配 -->搜索功能(mysql原生语句实现)