感谢您点进来查看我的文章~这里是为offer努力中的yixin,如果觉得有帮助的话,请点赞,follow,评论,非常感谢您的支持!
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-highest-salary
原题
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
±—±-------+
| Id | Salary |
±—±-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
±—±-------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
±--------------------+
| SecondHighestSalary |
±--------------------+
| 200 |
±--------------------+
考点:关键字distinct,order by,limit,ifnull
下列关键词给出在MySQL中使用方法
DISTINCT排除重复值
显示没有重复记录的工资
SELECT DISTINCT Salary from Employee
order by子句用法,ASC升序,DESC降序。
SELECT column1, column2,...
FROM tbl
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],...
注意limit n1,n2中,选择行是从n1+1开始,不是从n1开始
limit关键字用来在查询结果集中,选择指定的行返回
SELECT Salary from Employee LIMIT 5; //返回结果的前5条数据
SELECT Salary from Employee LIMIT 1,5; //返回从位移+1开始的5条数据
ifnull关键字
SELECT IFNULL(ex1,ex2)
如果ex1不是NULL,IFNULL()返回ex1,否则它返回ex2。
解题
利用order by desc降序排列,找出第二行(也就是第二高的工资)输出。注意用as给选择更名为SecondHighestSalary,要不然就输出整个子选择语句了。
代码及结果
SELECT IFNULL(
(SELECT DISTINCT Salary from Employee
order by Salary desc limit 1,1),NULL
) as SecondHighestSalary