博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-176:第二高的薪水
阅读量:4954 次
发布时间:2019-06-12

本文共 1828 字,大约阅读时间需要 6 分钟。

题目描述:

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

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

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

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

SQL架构:

1 Create table If Not Exists Employee (Id int, Salary int);2 Truncate table Employee;3 insert into Employee (Id, Salary) values ('1', '100');4 insert into Employee (Id, Salary) values ('2', '200');5 insert into Employee (Id, Salary) values ('3', '300');

解题思路:

  思路1:取第二高的薪水,可以用max()函数取出最大值,然后排除这个最大值,再取一次最大值即可。但这个方案有局限性,当需要取第N名的时候,不好用。

  思路2:oracle可以先使用dense_rank函数按薪水降序排名,然后取第二名去重即可。mysql没有类似oracle的dense_rank函数,可以使用自定义变量进行排名。这个方案是根据名次去取的,要取第一名只需要改一个值即可。

解决方案一:

select max(a.salary) as SecondHighestSalary    from Employee a   where a.salary <> (select max(a.salary) from Employee a)

解决方案二:

 oracle:

select nvl((select distinct a.salary as SecondHighestSalary             from (select a.*, dense_rank() over(order by a.salary desc) as rn                     from Employee a) a            where rn = 2),           null)  from dual;

 mysql:

SELECT IFNULL(        (            SELECT                a.salary            FROM                (                    SELECT                        a.salary ,@rownum :=@rownum + 1 AS rn                    FROM                        (                            SELECT                                DISTINCT a.salary                            FROM                                Employee a                            ORDER BY                                a.salary DESC                        ) a,(SELECT @rownum := 0) b                ) a WHERE a.rn = 2        ),NULL) as SecondHighestSalary

 

转载于:https://www.cnblogs.com/zouqf/p/10282392.html

你可能感兴趣的文章
HDU2255 奔小康赚大钱 (最大权完美匹配) 模板题【KM算法】
查看>>
CodeForces 510C Fox And Names (拓扑排序)
查看>>
x264
查看>>
ES 06 - 通过Kibana插件操作ES中的索引文档 (CRUD操作)
查看>>
1231作业
查看>>
2018-2019-2 20175204 张湲祯 实验二《Java面向对象程序设计》实验报告
查看>>
透明窗口与不规则窗口制作方法总结
查看>>
什么是“QQ登录OAuth2.0”
查看>>
WPF入门二:Hello WPF
查看>>
HackTwelve 为背景添加圆角边框
查看>>
【剑指offer】跳台阶
查看>>
Linux学习之CentOS(二十九)--Linux网卡高级命令、IP别名及多网卡绑定
查看>>
记--linux 下svn安装配置,同步web目录
查看>>
mysql 'OR','IN',‘union’效率分析
查看>>
小幻美图 API
查看>>
一个人记笔记多没意思啊,拿出来分享一下咯
查看>>
CentOS 7 Update GCC G++
查看>>
1#执行模式
查看>>
Python全栈_Day2_操作系统基础
查看>>
7.BLE---跳频原理
查看>>