leetcode Sql题目总结 第二弹~

心已入冬 提交于 2019-11-27 07:12:11

1,

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

+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。

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

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
     DECLARE P INT DEFAULT N-1;
     SET P = N-1;
     IF (P<0) THEN
     RETURN NULL;
     ELSE
     RETURN (
     SELECT IFNULL(
      (
       SELECT DISTINCT Salary
       FROM Employee
       ORDER BY Salary DESC
       LIMIT P, 1
      ), NULL
    ) AS SecondHighestSalary
);
END IF;
END 

注意:

1,在navicat 中跑这个代码时,要在第一行写delimiter // ,不然DECLARE定义变量会报错的。

2,执行函数不用call命令,应该是select getNthHighestSalary(3) 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!