[Leetcode] 177. 第 N 高的薪水

2018-10-29 14:08:38 +08:00
 Acceml

题目

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

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

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

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

题解

上一个题目我们用 max 函数求了第二高的薪资,但是第 N 高的就不能用 max 函数求解了。我们用 limit 来求解,很多人用习惯了如下的语句:

select salary from employee limit N

以为 limit 只是用来限定个数的。

其实 limit 还有另一种用法就是 limit offset.

select salary from employee limit 4 offset 9

表示从10开始,返回 4 行,也可以写作:

select salary from employee limit 9, 4

因为这里涉及到哟不要返回空的问题,所以用了 IFNULL 函数:

IFNULL 函数是 MySQL 控制流函数之一,它接受两个参数,如果不是 NULL,则返回第一个参数。 否则,IFNULL 函数返回第二个参数。 综上,我们最终的 sql 书写如下:

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
 SET N=N-1;
  RETURN (    
      select IFNULL((select distinct salary from employee order by salary desc limit N,1),NULL)
  );
END

相关题目

1425 次点击
所在节点    程序员
2 条回复
shmilyin
2018-10-29 14:23:44 +08:00
如果我没记错的话,RETURN 前面是不能写东西的吧?
https://ww1.sinaimg.cn/large/005YhI8igy1fwp2ogpbryj30jp06taaa
shmilyin
2018-10-29 14:24:38 +08:00
补上图

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/502174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX