美文网首页
LeetCode 177. Nth Highest Salary

LeetCode 177. Nth Highest Salary

作者: 扑哧咳哧 | 来源:发表于2018-07-12 15:56 被阅读0次
    Write a SQL query to get the nth highest salary from the Employee table.
    
    +----+--------+
    | Id | Salary |
    +----+--------+
    | 1  | 100    |
    | 2  | 200    |
    | 3  | 300    |
    +----+--------+
    For example, given the above Employee table, the nth highest salary where n = 2 is 200. If there is no nth highest salary, then the query should return null.
    
    +------------------------+
    | getNthHighestSalary(2) |
    +------------------------+
    | 200                    |
    +------------------------+
    

    这条题目接触到了一个新的概念:SQL函数。关于MySQL中函数的概念和含义这里先不详解,有兴趣的码友可以去别的大牛博客看看。
    对于题目的要求,可以得出的分析如下:
    1.获得salary字段排第n位的记录,这里的排名需要去重,要用到distinct关键字来去重。
    2.仅获得一条记录,需要用到limit关键字。注意的一点,limit关键字的参数是从第n条记录开始(不包括第n条),到第n+m条记录。即,第一个参数是上标,第二个参数是偏移量。在这个题目里面,获得第n个记录的语法是

    limit n-1, 1
    

    但是因为sql中不能嵌入n-1这种表达式,所以要在函数体中通过declare和set关键字来保存n-1的值。
    最后的语句如下:

    CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
    BEGIN
      declare n1 int;
      set n1=N-1;
      RETURN (
          SELECT distinct salary from employee ORDER BY salary DESC LIMIT n1,1
      );
    END
    

    相关文章

      网友评论

          本文标题:LeetCode 177. Nth Highest Salary

          本文链接:https://www.haomeiwen.com/subject/zrlrpftx.html