V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Acceml
V2EX  ›  程序员

[Leetcode] 177. 第 N 高的薪水

  •  
  •   Acceml ·
    Acceml · 2018-10-29 14:08:38 +08:00 · 1406 次点击
    这是一个创建于 1977 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目

    编写一个 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
    

    相关题目

    2 条回复    2018-10-29 14:24:38 +08:00
    shmilyin
        1
    shmilyin  
       2018-10-29 14:23:44 +08:00
    如果我没记错的话,RETURN 前面是不能写东西的吧?
    https://ww1.sinaimg.cn/large/005YhI8igy1fwp2ogpbryj30jp06taaa
    shmilyin
        2
    shmilyin  
       2018-10-29 14:24:38 +08:00
    补上图
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3111 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:57 · PVG 20:57 · LAX 05:57 · JFK 08:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.