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,頁面很難打開啊。  回復  更多評論   

          主站蜘蛛池模板: 嘉祥县| 新巴尔虎右旗| 新营市| 瑞昌市| 广丰县| 区。| 常德市| 炉霍县| 昭苏县| 化隆| 平舆县| 贵定县| 饶平县| 佛山市| 黄冈市| 峨山| 定襄县| 新闻| 博客| 色达县| 于都县| 呼伦贝尔市| 乡宁县| 道孚县| 锡林郭勒盟| 拜城县| 平塘县| 锡林浩特市| 囊谦县| 泌阳县| 元谋县| 镇江市| 盐边县| 深泽县| 永丰县| 江西省| 濮阳市| 邹平县| 怀集县| 枝江市| 双峰县|