V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Acceml
V2EX  ›  程序员

[Leetcode] 176. 第二高的薪水

  •  
  •   Acceml ·
    Acceml · 2018-11-06 09:59:19 +08:00 · 3519 次点击
    这是一个创建于 2212 天前的主题,其中的信息可能已经有所发展或是发生改变。

    题目

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水( Salary ) 。

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

    例如上述 Employee 表,SQL 查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

    +---------------------+
    | SecondHighestSalary |
    +---------------------+
    | 200                 |
    +---------------------+
    

    题解

    这个题目求第二高的,而我们的 sql 语句中只有 max 这个关键字求最高的。那么利用最高的这个转化一下就可以了.

    select max(Salary) as SecondHighestSalary 
    from Employee 
    where
    Employee.Salary < (select max(Salary) from Employee);
    

    热门阅读

    Leetcode 名企之路

    14 条回复    2018-11-07 16:10:08 +08:00
    TuringGunner
        1
    TuringGunner  
       2018-11-06 10:14:41 +08:00
    如果我要第三高或者第四高的薪水呢,性能就太差了吧

    这个方法是不是通用性差了点
    luguhu
        2
    luguhu  
       2018-11-06 10:18:00 +08:00 via Android
    不能 order by 之后 offset limit 取吗?
    cissoid
        3
    cissoid  
       2018-11-06 10:31:52 +08:00   ❤️ 1
    SELECT IF(
    EXISTS(SELECT Salary FROM Employee GROUP BY Salary ORDER BY Salary DESC LIMIT 1, 1),
    (SELECT Salary FROM Employee GROUP BY Salary ORDER BY Salary DESC LIMIT 1, 1),
    null
    ) AS SecondHighestSalary;
    behanga
        4
    behanga  
       2018-11-06 10:52:51 +08:00
    @luguhu offset limit 无法区分有多个相同第二高薪水的情况
    mahone3297
        5
    mahone3297  
       2018-11-06 10:53:15 +08:00
    mysql8 窗口函数
    petelin
        6
    petelin  
       2018-11-06 11:12:44 +08:00   ❤️ 1
    @behanga 先去重不行?
    MartinWu
        7
    MartinWu  
       2018-11-06 11:13:51 +08:00
    @TuringGunner #1 你为什么会觉得通用跟高性能可以并存?
    littlewing
        8
    littlewing  
       2018-11-06 12:35:58 +08:00
    这个并不通用,也不高性能啊
    lispmacro
        9
    lispmacro  
       2018-11-06 12:44:25 +08:00
    select distinct(salary) from employee where rownum = 2; oracle 里这个应该可以吧?
    takato
        10
    takato  
       2018-11-06 12:55:37 +08:00 via iPhone
    绝大多数情况下,时间都是要拿空间换的.....
    20015jjw
        11
    20015jjw  
       2018-11-06 13:18:34 +08:00
    我看 lz 每次发帖都被喷 挺可怜
    好奇 lz 在哪个名企
    SukkaW
        12
    SukkaW  
       2018-11-06 13:20:20 +08:00   ❤️ 1
    @20015jjw 他小米的
    20015jjw
        13
    20015jjw  
       2018-11-06 13:24:06 +08:00
    @SukkaW 小米不考算法么?
    talen666
        14
    talen666  
       2018-11-07 16:10:08 +08:00
    @20015jjw 这帖还好吧 只看到讨论 也没看到喷的啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 115ms · UTC 09:36 · PVG 17:36 · LAX 01:36 · JFK 04:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.