LeetCode每天一题

LeetCode-mysql题:176.第二高的薪水

题目

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

+—-+——–+
| Id | Salary |
+—-+——–+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+—-+——–+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

+———————+
| SecondHighestSalary |
+———————+
| 200 |
+———————+
通过次数113,925提交次数324,021

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-highest-salary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

我们一看到这个题,就会想到,要想求第二高,不存在第二高还返回为null。这用编程思想明显是要用if语句啦。所以要想做这个题,首先需要知道ifnull函数,我们上网搜一下ifnull函数的用法:

原文链接:https://www.yiibai.com/mysql/ifnull.html

IFNULL函数用法

MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。 否则,IFNULL函数返回第二个参数。

两个参数可以是文字值或表达式。

以下说明了IFNULL函数的语法:

1
IFNULL(expression_1,expression_2);

如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果。

IFNULL函数根据使用的上下文返回字符串或数字。

如果要返回基于TRUEFALSE条件的值,而不是NULL,则应使用IF函数

distinct:去重

distinct:去重一样的Salary。

limit: LIMIT子句来限制SELECT语句返回记录的行数。

limit:限时返回的个数
offset:跳过几个
limit 1 offset 1:返回一个结果,跳过一个
例如返回第三高就是:limit 1 offset 2

答案解析

1
2
3
4
5
6
7
# Write your MySQL query statement below
select -- 使用ifnull进行判断
ifnull((select distinct Salary -- 查重Salary
from Employee
order by Salary desc -- 对Salary按从高到底排序
limit 1 offset 1),null) -- 跳过第一个取第二高的
as SecondHighestSalary; -- 取别名SecondHighestSalary

已完成

执行用时:71 ms

输入

{“headers”: {“Employee”: [“Id”, “Salary”]}, “rows”: {“Employee”: [[1, 100], [2, 200], [3, 300], [4, 150]]}}

输出

{“headers”: [“SecondHighestSalary”], “values”: [[200]]}

差别

预期结果

{“headers”: [“SecondHighestSalary”], “values”: [[200]]}

点击查看
-------------------本文结束 感谢您的阅读-------------------