通知 网站从因情语写改为晴雨,这个网站的模板也从calmlog_ex改为 whimurmur

leetcode数据库 系列题 第N高薪水问题

472人浏览 / 0人评论 / | 作者:因情语写  | 分类: 数据库  | 标签: 数据库  /  leetcode  | 

作者:因情语写

链接:https://www.proprogrammar.com/article/632

声明:请尊重原作者的劳动,如需转载请注明出处


    前面我们讲了部门前N高薪水的问题,现在再来讲讲第N高薪水的问题,主要是使用limit offset size

    176. 第二高的薪水

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

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

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

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
select MAX(Salary) SecondHighestSalary
from Employee
where Salary < (select MAX(Salary) from Employee);

     没有group by也可以用聚集函数,当select返回一行中的一个字段(数据)时,可以直接与另一个字段(数据)比较,对结果取别名

    再看另一种比较快的解法

select ifNull((select distinct Salary from Employee order by Salary desc limit 1,1),null) as SecondHighestSalary;

    当没有结果行时,用ifNull转为null,否则结果是空的(不是null),还有limit offset size的用法

    177. 第N高的薪水

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

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

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

+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+
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 M,1
);
END

    函数的定义,包括声明变量与设置变量值

    再看一个优化的写法

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
set n = n-1;
  RETURN (
      # Write your MySQL query statement below.
      select distinct Salary from Employee order by Salary desc limit n,1
  );
END

    去掉了自定义的变量,也可以看出变量名不区分大小写


亲爱的读者:有时间可以点赞评论一下

点赞(0) 打赏

全部评论

还没有评论!
广告位-帮帮忙点下广告