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~



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。