Leetcode SQL_#176_第二高的薪水

Leetcode SQL_#176_第二高的薪水

Contents

题目


解答

select distinct Salary as SecondHighestSalary
from Employee
order by Salary desc
limit 1 offset 1

知识点:
offset关键字,跳过排序当中的第一个,那么得到的就是第二大的数字

问题:

  • 这里边几个关键字的顺序问题,比如as应该放在哪里?limit和offset有没有严格的先后顺序?
    * as要放在字段名称之后,from之前,因为我是重命名了一个字段
    * 实验证明,limit必须在前,offset在后,不然会报语法错误
  • 答案存在的漏洞:可能表中不同的工资只有1种,用了offset 1就是有问题的。

使用临时表

第二行括号里的select查询出来的结果就是一个临时表

select 
(select distinct Salary from Employee order by Salary desc limit 1 offset 1) 
as SecondHighestSalary;

使用ifnull()函数

ifnull(A,B):判断A是否是null,如果是null会返回默认值B

select
ifnull((select distinct Salary from Employee order by Salary desc limit 1 offset 1),null)
as SecondHighestSalary;

注意:ifnull里边的第一项是一个select查询出来的临时表,需要加上括号

原文地址:https://www.cnblogs.com/Howfars/p/15430998.html