2020-04-01-(2)
找到Second
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')
输入
{"headers": {"Employee": ["Id", "Salary"]}, "rows": {"Employee": [[1, 100], [2, 200], [3, 300]]}
输出
{"headers": ["SecondHighestSalary"], "values": [[200]]}
Solution 1
Select Max(distinct Salary) as SecondHighestSalary
from Employee
Where Salary < (Select Max(distinct Salary) from Employee)
使用子查询找到最高salary记为SecondHighestSalary
Max函数返回最大值,distinct去重。
Select Max(distinct Salary) as SecondHighestSalary
from Employee
得到第一高薪水。
再找出小于SecondHighestSalary的即是第二高。
Select Max
Select Max(distinct Salary) as SecondHighestSalary
from Employee
Where Salary < “第一高”
Solution 2 使用 limit 和 offset
limit n子句表示查询结果返回前n条数据
offset n表示跳过x条语句
limit y offset x 分句表示查询结果跳过 x 条数据,读取前 y 条数据
使用limit和offset,降序排列再返回第二条记录可以得到第二大的值。
Select distinct Salary as SecondHighestSalary
from Employee
Order by Salary desc #降序排列
Limit 1,1 #跳过第一条得到第二条
考虑特殊情况 NULL
题目要求,如果没有第二高的成绩,返回空值,所以这里用判断空值的函数(ifnull)函数来处理特殊情况。
fnull(a,b)函数解释:
【2020-04-01-(2)】如果value1不是空,结果返回a
如果value1是空,结果返回b
select ifnull (第2步的Salary,null) as 'SecondHighestSalary'
Select ifnull(
(Select distinct salary
from Employee
Order by Salary desc
Limit 1,1),null) as SecondHighestSalary
推荐阅读
- 霍兰德职业代码对照表
- 繁华声遁入空门
- 愿你我找到心中所爱
- 2018-10-27脱单攻略|2018-10-27脱单攻略 | 如何找到心仪的另一半
- 插件化无法获取或找到.so文件
- 认识职业发展
- mysql提示无法找到句饼_找不到数据库启动句柄
- 精准!找到想要的关键字
- Python爬虫技术要学到什么程度才可以找到工作()
- 读《12条生活规则》,在噪杂混乱的环境里找到生活的目的和意义