想要精通算法和SQL的成长之路 - 第N高的薪水(SQL)
想要精通算法和SQL的成长之路 - 第N高的薪水(SQL)
- 前言
- 一. 第二高的薪水
- 1.1 offset 的使用
- 1.2 ifnull 的使用
- 1.3 分页查询
- 1.3 总结
- 二. 第N高的薪水
前言
想要精通算法和SQL的成长之路 - 系列导航
一. 第二高的薪水
原题链接
编写一个 SQL
查询,获取并返回 Employee
表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null
。
我们来建立一张表:
随便插入几条数据:
那么首先,查询薪水的最高值,我们就利用到了 max
函数:
SELECT max(salary) as secondhighestsalary from Employee
那么查询第二高的怎么办?简而言之就是
- 排除掉最大值,再查一次
max
,得到的结果就是第二高的。
SELECTmax( salary ) AS secondhighestsalary
FROMEmployee
WHEREsalary != (SELECT max( salary ) FROM Employee)
1.1 offset 的使用
offset n
的意思代表跳过n
条语句。一般和limit
一起用。例如:limit n offset m
代表:先跳过m
条结果,再取前n
条结果。
我们先看下这个SQL
select salary from Employee order by salary desc limit 2
结果如下:
因此我们需要考虑到去重。加一个distinct
字段。
此时我们再通过offset
来取第二个值,并赋个别名即可:
SELECT( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1 OFFSET 1 ) AS secondhighestsalary
大家在来思考下,为什么要下面这条SQL
不行?
select distinct salary as secondhighestsalary from Employee order by salary desc limit 1 offset 1
如果表里面只有一条数据的话,它的执行效果如下:
不满足返回null
的要求。 这么一看,第一个SQL
就相当于 select (空数据) as secondhighestsalary
这里就会将对应的字段设置为null
。因此得用第一种。
1.2 ifnull 的使用
如果第一个表达式为null
,就返回第二个参数的值。否则返回第一个表达式的返回结果。
IFNULL(expression, alt_value)
结果如下:
SELECTifnull( ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1 OFFSET 1 ), NULL ) AS secondhighestsalary
1.3 分页查询
简单利用分页即可,limit
从0开始,那么我们限制每页的大小是1,取第二页的即是第二大的。
SELECTifnull( ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1, 1 ), NULL ) AS secondhighestsalary
1.3 总结
四种方式:
# 第一种,select + where
SELECTmax( salary ) AS secondhighestsalary
FROMEmployee
WHEREsalary != (SELECT max( salary ) FROM Employee)# 第二种 limit 1 offset 1
SELECT ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1 OFFSET 1 ) AS secondhighestsalary# 第三种 limit + ifnull
SELECT ifnull( ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1 OFFSET 1 ), NULL ) AS secondhighestsalary# 第四种 分页
SELECT ifnull( ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1, 1 ), NULL ) AS secondhighestsalary
知识点:
ifnull
的使用。offset
的使用:limit n offset m
代表:先跳过m
条结果,再取前n
条结果。
二. 第N高的薪水
原题链接
相当于第一个题目的进阶了,直接结果如下:相当于把上面的1替换成N-1
。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGINSET N = N - 1;RETURN (SELECT ifnull( ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1 OFFSET N ), NULL ) );
END
想要精通算法和SQL的成长之路 - 第N高的薪水(SQL)相关推荐
- 想要精通算法和SQL的成长之路 - 两两交换链表中的节点
想要精通算法和SQL的成长之路 - 两两交换链表中的节点 前言 一. 两两交换链表中的节点 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 两两交换链表中的节点 原题链接 给你一个链表,两两 ...
- 想要精通算法和SQL的成长之路 - 超过经理收入的员工(SQL)
想要精通算法和SQL的成长之路 - 超过经理收入的员工(SQL) 前言 一. 超过经理收入的员工 1.1 自连接 1.2 子查询 1.3 join 语句 前言 想要精通算法和SQL的成长之路 - 系列 ...
- 想要精通算法和SQL的成长之路 - 判断子序列问题
想要精通算法和SQL的成长之路 - 判断子序列问题 前言 一. 判断子序列 1.1 动态规划做法 1.2 双指针 二. 不同的子序列 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 判断子序 ...
- 第二高的薪水--sql查询
LEETCODE题目:编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+-------- ...
- 好想学python机器人_【Python成长之路】从零学GUI -- 制作智能聊天机器人
[写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...
- C语言基于FOC控制算法和STM32主控芯片的双路直流无刷电机控制器源码
[FOC+STM32]双路直流无刷电机矢量控制器-使用文档
- leetcode176. 第二高的薪水(SQL)
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 10 ...
- SQL.176.(简单)第二高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . ±-±-------+ | Id | Salary | ±-±-------+ | 1 | 100 | | 2 | ...
- 编写一个SQL查询,获取Employee表中第二高的薪水(Salary)
单选 class X{Y y=new Y();public X(){System.out.print("X");} } class Y{public Y(){System.out. ...
最新文章
- 深度对话林元庆:AI创业历史性窗口到来,将诞生下个BAT
- Windows下各个盘中的文件夹属性变为隐藏,怎么取消隐藏属性
- 在 wxWidgets 中播放声音的示例
- cobbler基础安装
- maven原型_创建自定义Maven原型
- simulink中mask设置_(实现BPSK学习Verilog)1. Simulink仿真实现
- php html class,html中规定元素的类名的属性class
- java导入错误怎么解决_eclipse导入文件及导入错误的解决方法
- wps怎么把当前页面设置为横向_办公软件操作技巧011:如何将word文档的部分页面改为横向...
- 从原子操作走向模板部署,详解云上资源自动化部署新模式
- 从苏宁电器到卡巴斯基(第二部)第08篇:我在卡巴的日子 VIII
- python怎么调用类中的函数_类中的python函数调用
- 【BZOJ1061】【NOI2008】志愿者招募 费用流神题、单纯形裸题(代码费用流)
- Python使用阿里API进行情感分析
- cpp导入excel到mysql_将EXCEL表格中的数据导入mysql数据库表中
- 从REINFORCE到PPO,看Policy Gradient的前世今生
- Centos8安装vsftpd
- 申请CSC公派访问学者的常见问题
- Vue 源码 思维导图
- 2022最新最全MyBatis(简单全面,一发入魂,内容超详细)