需注:编写SQL查询出员工表中排名第二的工资(使用MYSQL数据库)。
+——+ ——– +
| ID |工资|
+——+ ——– +
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+——+ ——– +
网络配图
例如,给定上面的员工表,按要求查询应该返回200作为第二高工资,如果没有第二高的工资,那么查询应该返回null。
——————— + +
| 第二高工资 |
——————— + +
200 | |
——————— + +
解决方法一:
方法:使用子查询和限制子句;
算法:将表中的工资按降序排序,然后利用限制条件第二高工资。
SELECT DISTINCT
Salary AS SecondHighestSalary
FROM
Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
然而,如果没有第二高工资,这个解决方法将认为是“错误的方法”,因为表中可能只有一条记录,为了解决这个问题,我们可以把它作为临时表,修改后的正确语句如下。
SELECT
(SELECT DISTINCT
Salary
FROM
Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1) AS SecondHighestSalary
;
解决方法二:这个方法使用数据库的ifnull功能解决“空”的问题,SQL语句如下。
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL) AS SecondHighestSalary