1.176. 第二高的薪水

编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。

±—±-------+

| Id | Salary |

±—±-------+

| 1 | 100 |

| 2 | 200 |

| 3 | 300 |

±—±-------+

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

±--------------------+

| SecondHighestSalary |

±--------------------+

| 200 |

±--------------------+

两种答案:

1.IFNULL

SELECT
    IFNULL(
      (SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
        LIMIT 1 OFFSET 1),
    NULL) AS SecondHighestSalary

OFFSET指定SELECT语句开始查询的数据偏移量。相当于每页显示几条数据。

select * from employee limit 1 offset 2;

IFNULL(expr1,expr2) : expr1是一个表达式,当expr1为null时 直接使用expr2的值。

select IFNULL((select id from employee where id = 4),null)  as data;

通过内层循环来判断是否有数据,来决定是否要进行IFNULL函数判断 如果没有数据的话 直接返回Null。

SELECT
    (SELECT DISTINCT
            Salary
        FROM
            Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1) AS SecondHighestSalary

通过内查询 查找出第二高的薪水。