Change Dir

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

          統計

          留言簿(18)

          積分與排名

          “牛”們的博客

          各個公司技術

          我的鏈接

          淘寶技術

          閱讀排行榜

          評論排行榜

          Leetcode-Database-176-Second Highest Salary-Easy

          leetcode地址:https://oj.leetcode.com/problems/second-highest-salary/

           

          這個問題很有趣,是要求我們寫個sql來查詢Employee表里第二高的工資,如果沒有第二高的,那么返回null

          +----+--------+
          | Id | Salary |
          +----+--------+
          | 1  | 100    |
          | 2  | 200    |
          | 3  | 300    |
          +----+--------+

           

           

          看到這個問題,可能很多人會想,這很簡單啊,寫個order by desc,然后找到第二個即可。

          select Salary from Employee order by Salary desc limit 1,1

          試試提交唄?Wrong answer,為什么?看條件約束啊,沒有第二要返回null,我看到null的第一直覺是通過join搞到null值,于是有了下面的ac sql

          select
              max(Salary) as SecondHighestSalary
          from(
          select
          o1.*
          ,case when o2.s is null then 1 else 0 end as nt
          from
          (select * from Employee)o1
          left outer join
          (select max(Salary) as s from Employee)o2
          on(o1.Salary=o2.s)
          )t
          where nt=1

           

          思路簡單說就是通過全表左外聯最大salary,從關聯不到的salary里再找最大不就是第二大嗎?

          最后的結果是894ms,當然我堅信有很多更快更高效的結果。

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

          評論

          # re: Leetcode-Database-176-Second Highest Salary-Easy 2015-01-31 17:59 京山游俠

          mark。
          你的博客中引用了不該引用的JavaScript,頁面很難打開啊。  回復  更多評論   

          主站蜘蛛池模板: 青神县| 扶沟县| 治多县| 杂多县| 珠海市| 邯郸市| 南京市| 临清市| 罗甸县| 三都| 木兰县| 汪清县| 长乐市| 潢川县| 南乐县| 马山县| 耒阳市| 五大连池市| 于都县| 乾安县| 潼关县| 邵阳县| 宿州市| 辽中县| 察雅县| 延津县| 奎屯市| 电白县| 芮城县| 绥江县| 白城市| 织金县| 青河县| 图们市| 和静县| 东平县| 新安县| 简阳市| 藁城市| 河北省| 银川市|