Change Dir

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

          統(tǒng)計

          留言簿(18)

          積分與排名

          “牛”們的博客

          各個公司技術(shù)

          我的鏈接

          淘寶技術(shù)

          閱讀排行榜

          評論排行榜

          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

           

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

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

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

          評論

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

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

          主站蜘蛛池模板: 安化县| 湄潭县| 桐乡市| 日土县| 蓬安县| 无锡市| 邓州市| 海林市| 铜山县| 阳信县| 蕲春县| 孟村| 鸡东县| 吕梁市| 翁牛特旗| 宁海县| 平邑县| 永吉县| 宣城市| 关岭| 水富县| 甘谷县| 平武县| 蚌埠市| 景洪市| 商城县| 佛坪县| 江西省| 洛浦县| 武鸣县| 海兴县| 西峡县| 建水县| 禄劝| 都昌县| 平邑县| 汝州市| 遵义市| 布拖县| 夹江县| 和平县|