★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-kszfojvm-md.html
➤若是连接不是山青咏芝的博客园地址,则多是爬取做者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持做者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Write a SQL query to get the second highest salary from the Employee
table.mysql
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+
For example, given the above Employee table, the query should return 200
as the second highest salary. If there is no second highest salary, then the query should return null
.git
+---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+
编写一个 SQL 查询,获取 Employee
表中第二高的薪水(Salary) 。github
+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+
例如上述 Employee
表,SQL查询应该返回 200
做为第二高的薪水。若是不存在第二高的薪水,那么查询应返回 null
。算法
+---------------------+ | SecondHighestSalary | +---------------------+ | 200 | +---------------------+
LIMIT
子句算法:按降序对不一样的工资进行排序,而后利用该LIMIT
子句得到第二高的工资。sql
1 SELECT DISTINCT 2 Salary AS SecondHighestSalary 3 FROM 4 Employee 5 ORDER BY Salary DESC 6 LIMIT 1 OFFSET 1
可是,若是没有这样的第二高薪,这个解决方案将被断定为“错误答案”,由于此表中可能只有一条记录。为了解决这个问题,咱们能够将其做为临时表。微信
1 SELECT 2 (SELECT DISTINCT 3 Salary 4 FROM 5 Employee 6 ORDER BY Salary DESC 7 LIMIT 1 OFFSET 1) AS SecondHighestSalary 8 ;
IFNULL
和LIMIT
子句解决'NULL'问题的另外一种方法是使用IFNULL
以下功能。app
1 SELECT 2 IFNULL( 3 (SELECT DISTINCT Salary 4 FROM Employee 5 ORDER BY Salary DESC 6 LIMIT 1 OFFSET 1), 7 NULL) AS SecondHighestSalary
105msspa
1 # Write your MySQL query statement below 2 select ( 3 select distinct Salary from Employee order by Salary Desc limit 1 offset 1 4 )as SecondHighestSalary
106mscode
1 # Write your MySQL query statement below 2 select max(salary) as SecondHighestSalary 3 from employee 4 where salary < (select max(salary) from employee)
108ms
1 # Write your MySQL query statement below 2 # select distinct Salary SecondHighestSalary from Employee order by Salary DESC limit 1,1 3 select ifNull((select distinct Salary from Employee order by Salary Desc limit 1,1),null) as SecondHighestSalary
110ms
1 # Write your MySQL query statement below 2 SELECT IFNULL( (SELECT DISTINCT salary 3 FROM Employee 4 ORDER BY salary DESC 5 LIMIT 1,1),NULL) AS SecondHighestSalary;