力扣mysql练习题02(简单)
查找第二最大数,没有返回null
## sql:
Create table If Not Exists Employee (Id int, Salary int)
Truncate table Employee
insert into Employee (Id, Salary) values ('1', '100')
insert into Employee (Id, Salary) values ('2', '200')
insert into Employee (Id, Salary) values ('3', '300')
题目:
编写一个 SQL 查询,获取
Employee
表中第二高的薪水(Salary) 。±—±-------+
| Id | Salary |
±—±-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
±—±-------+例如上述
Employee
表,SQL查询应该返回200
作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回null
。±--------------------+
| SecondHighestSalary |
±--------------------+
| 200 |
±--------------------+
答案一:
select max(Salary) as SecondHighestSalary from Employee where Salary !=(select max(Salary) from Employee);
据此楼主说,这是为了查找不为最大数的最大数,我觉得很有意思,不过这个不是最优解,只是我觉得很好懂
答案二:
select
(select distinct salary from employee
order by salary desc limit 1,1)
as SecondHighestSalary
利用 limit 进行限制 此方法可适用于求第N高的薪水,且数据越复杂,速度优势越明显,这个就比较灵活了,可以查到第任意位置的数据,我还是觉得这个好用