题目地址:https://oj.leetcode.com/problems/nth-highest-salary/
这个题目其实是176的扩展,刚才不是要找第二大的salary吗,那好,现在直接扩展到任意,第N大,而且这次是要写一个Function,N作为参数。表还是之前的Employee表。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
我不知道为什么这个题目的通过率那么低,但是事实是使用176题那篇文章的“错误”做法即可解掉这个题目。注意limit是从0开始,所以变量要默认自减1。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS 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起来,然后get第n个item即可,当然这会利用到hive的默认的几个UDAF和UDF。
思路肯定有很多,欢迎大家一起来share~