Leetcode-Database-177-Nth Highest Salary-Medium

Leetcode-Database-177-Nth Highest Salary-Medium

题目地址:https://oj.leetcode.com/problems/nth-highest-salary/

 

这个题目其实是176的扩展,刚才不是要找第二大的salary吗,那好,现在直接扩展到任意,第N大,而且这次是要写一个FunctionN作为参数。表还是之前的Employee表。

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

 

 

 

我不知道为什么这个题目的通过率那么低,但是事实是使用176题那篇文章的“错误”做法即可解掉这个题目。注意limit是从0开始,所以变量要默认自减1

 

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

 

大写的部分是题目已经给的框架,我们只需要在Return语句里填写内容即可,我declare了一个变量,不知道是否是一个hack手段,但是it works.

 

当然本着在大数据平台下sql的经验,如果换做是在hive下写这个,思路是什么呢?

1,我建议直接写一个UDAF解决。

2,不具备UDAF能力的话,可以在一个key下做sort by后,把他们group_concat或者wm_concat起来,然后getnitem即可,当然这会利用到hive的默认的几个UDAFUDF

 

思路肯定有很多,欢迎大家一起来share~



你可能感兴趣的:(Leetcode-Database-177-Nth Highest Salary-Medium)