【LeetCode--数据库】薪水问题

176.第二高的薪水(简单)

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

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

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

期望结果如下:

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

解法:选择出所有不重复的薪水,按照薪水降序排列后,选择第二条数据,即为第二高的薪水

select (select distinct Salary from Employee
order by Salary DESC
limit 1 offset 1) as SecondHighestSalary;

PS:limit  n offset m 表示:从第m条开始,选取n条数据(从0开始排序,所以上面选第二条数据 是 offset 1)

177.第N高的薪水

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

例如下述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 高的薪水,那么查询应返回 null

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

期望结果如下:

+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+

解法:思路与上面第二高薪水相同,降序排列后,使用limit offset 选取第N高的薪水

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  declare m int;
  set m = N-1;
  RETURN (
      select distinct Salary
      from Employee 
      order by Salary DESC
      limit 1 offset m
  );
END

PS:这一题涉及mysql的自定义函数(user-defined function UDF),可以先了解下再解题

创建自定义函数,简单来说就是:

  create function 函数名(形参列表) returns 返回类型  -- 注意是retruns

  begin

    函数体  —— 函数内定义的变量,如上面的 set m = N-1;

    返回值       ——return部分

  end

猜你喜欢

转载自blog.csdn.net/zz_moon/article/details/81279763
今日推荐