題目地址: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~