题目:编写一个 SQL 查询,获取并返回 Employee
表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null
。
答案:
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL) AS SecondHighestSalary
函数解析:
1、limit
(1)当limit后面只有一个参数的时候,表示需要读取的数据的数量;
(2)当limit后面有两个参数的时候,第一个表示要跳过的数量,后一位表示要读取的数据的数量;
1 select * from page limit 3 # 直接读取3条数据 2 3 select * from page limit 1,3 # 表示读取第2、3、4条数据
2、limit结合offset
当limit结合offset组合使用时,limit后面跟的数据表示要读取的数据的数量,而offset后面跟的数据表示要跳过的数据量
1 select * from page limit 3 offset 1 # 表示读取第2、3、4条数据
扩展:查找第N高的工资
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
declare m INT;
SET m = N-1;
RETURN (
select ifnull((select salary from Employee
order by salary limit 1 offset m),null)
as getNthHighestSalary
);
END