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。  回復  更多評論   

          主站蜘蛛池模板: 高平市| 大竹县| 乌拉特前旗| 营山县| 南充市| 民勤县| 西华县| 冷水江市| 教育| 拉孜县| 固原市| 东丽区| 斗六市| 富源县| 万源市| 丹阳市| 灯塔市| 志丹县| 昌乐县| 黎城县| 桃源县| 建湖县| 措美县| 舟山市| 武威市| 南靖县| 甘谷县| 清水河县| 武鸣县| 大城县| 枣庄市| 贵港市| 清水县| 乌鲁木齐县| 留坝县| 梁平县| 志丹县| 尼玛县| 桑日县| 忻城县| 通许县|