Change Dir

          先知cd——熱愛生活是一切藝術的開始

          統計

          留言簿(18)

          積分與排名

          “牛”們的博客

          各個公司技術

          我的鏈接

          淘寶技術

          閱讀排行榜

          評論排行榜

          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~

          posted on 2015-01-27 16:59 changedi 閱讀(3382) 評論(1)  編輯  收藏 所屬分類: 數據

          評論

          # re: Leetcode-Database-177-Nth Highest Salary-Medium 2015-01-31 18:00 京山游俠

          mark。  回復  更多評論   

          主站蜘蛛池模板: 佛冈县| 沂水县| 从化市| 洪泽县| 唐海县| 赣榆县| 陕西省| 青神县| 肥乡县| 勃利县| 兴宁市| 资兴市| 安塞县| 惠州市| 昌吉市| 图木舒克市| 衡南县| 马山县| 余姚市| 嵊泗县| 万全县| 仁寿县| 莆田市| 吴桥县| 得荣县| 永泰县| 姚安县| 永安市| 乐山市| 邳州市| 马山县| 娱乐| 林口县| 察雅县| 策勒县| 呼和浩特市| 百色市| 湖北省| 鹤峰县| 定安县| 济源市|