Leetcode-Database-177-Nth Highest Salary-Medium
題目地址:https://oj.leetcode.com/problems/nth-highest-salary/
這個(gè)題目其實(shí)是176的擴(kuò)展,剛才不是要找第二大的salary嗎,那好,現(xiàn)在直接擴(kuò)展到任意,第N大,而且這次是要寫(xiě)一個(gè)Function,N作為參數(shù)。表還是之前的Employee表。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
我不知道為什么這個(gè)題目的通過(guò)率那么低,但是事實(shí)是使用176題那篇文章的“錯(cuò)誤”做法即可解掉這個(gè)題目。注意limit是從0開(kāi)始,所以變量要默認(rèn)自減1。
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
大寫(xiě)的部分是題目已經(jīng)給的框架,我們只需要在Return語(yǔ)句里填寫(xiě)內(nèi)容即可,我declare了一個(gè)變量,不知道是否是一個(gè)hack手段,但是it works.
當(dāng)然本著在大數(shù)據(jù)平臺(tái)下sql的經(jīng)驗(yàn),如果換做是在hive下寫(xiě)這個(gè),思路是什么呢?
1,我建議直接寫(xiě)一個(gè)UDAF解決。
2,不具備UDAF能力的話,可以在一個(gè)key下做sort by后,把他們group_concat或者wm_concat起來(lái),然后get第n個(gè)item即可,當(dāng)然這會(huì)利用到hive的默認(rèn)的幾個(gè)UDAF和UDF。
思路肯定有很多,歡迎大家一起來(lái)share~
posted on 2015-01-27 16:59 changedi 閱讀(3386) 評(píng)論(1) 編輯 收藏 所屬分類: 數(shù)據(jù)