Easy
注意筛选结果可能为null, 要对null进行处理
Question
Write a SQL query to get the second highest salary from the Employee table.
+——+————+
| 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.
+——————————-+
| SecondHighestSalary |
+——————————-+
| 200 |
+——————————-+
Approach1
Using sub-query and LIMIT clause [Accepted]
Algorithm
Sort the distinct salary in descend order and then utilize the LIMIT clause to get the second highest salary.
SELECT DISTINCTSalary AS SecondHighestSalaryFROMEmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1
However, this solution will be judged as ‘Wrong Answer’ if there is no such second highest salary since there might be only one record in this table. To overcome this issue, we can take this as a temp table.
MySQL
SELECT(SELECT DISTINCTSalaryFROMEmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1) AS SecondHighestSalary;
Approach2
Using IFNULL and LIMIT clause [Accepted]
Another way to solve the ‘NULL’ problem is to use IFNULL funtion as below.
MySQL
SELECTIFNULL((SELECT DISTINCT SalaryFROM EmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1),NULL) AS SecondHighestSalary
