不期速成 日拱一卒 不期速成 日拱一卒
首页
技术
测试
分类
标签
归档
关于
首页
技术
测试
分类
标签
归档
关于
  • Hello Docker
  • 二进制文件安装Docker指南
  • Docker网桥导致网络故障分析
  • 使用Docker部署Python开发调试运行环境
  • Habor-轻量化容器服务自动部署工具
  • 当开发团队开始用Docker,测试团队应该做什么?
  • 如何把应用服务手动注册到Systemd
  • 探究inode耗尽导致的no space left on device报错原因
  • PyCharm远程开发配置攻略
  • 视频推流方案
  • Prometheus&Grafana打造性能测试监控服务
  • Pythoner的vim
  • RobotFramework字符转译之坑
  • JSONSchema常用关键字语法手册
  • 根据JSON Schema生成JSON样例数据
  • 一图看懂正则表达式
  • SQL中LIMIT和IFNULL的使用
    • 一、回顾LIMIT子句知识细节
    • 二、回顾IFNULL函数的细节
  • 基于Druid的接口测试自动化方案
  • 技术
2019-05-12

SQL中LIMIT和IFNULL的使用

​ 打开力扣(LeetCode国内版)随便逛逛,突然发现还有SQL题目,随便点开一道简单的题目,平常一般也就用用普通的CURD、分组、排序,多表关联查询什么的,这道题我是没做出来!各位小伙伴看看这道题,大家会不会做~这道题是这样子的:

leetcode-sql-176-desc

看起来普普通通哦,第一反应,排个序嘛~

SELECT DISTINCT(Salary) AS SecondHighestSalary FROM Employee ORDER BY Salary DESC;
1

再然后就发现卡壳了,触发了我的知识盲区!

  1. 如何只取出第2行数据?
  2. 如何判断是否有第二高的薪水(有可能所有人薪水都一样或空表的情况)?
  3. 如何返回null?

开始补习功课!


各种数据库的SQL有一定差异,我们以使用较多的MySQL数据库的SQL语法为例。

# 一、回顾LIMIT子句知识细节

首先我们回顾下如何限制只返回查询结果的前两行?

SELECT some_col FROM some_table LIMIT 2;
1

上述代码使用SELECT语言检索单独的一列数据。LIMIT 2指示MySQL数据库返回不超过2行的数据,其实这就是我们平时最常用的LIMIT子句,但这不是完整的LIMIT子句。

知识点来了!

# 1. LIMIT子句的完整形态是这样子的:

LIMIT return_rows_number OFFSET start_index
1

# 2. OFFSET默认值为0:

我们上面语句的LIMIT 2其实是LIMIT 2 OFFSET 0的默认简写形式,不显式声明OFFSET值,则OFFSET默认为0。

# 3. 简化版的LIMIT子句:

LIMIT start_index, return_rows_number
1

接下来我们实战下看看效果,加深下理解:

limit-2-sql-demo-image-20190512095326845

对于这道题,我们要获取第二行数据,应该这样写

SELECT DISTINCT(Salary) FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1;
1

# 二、回顾IFNULL函数的细节

MySQL的IFNULL函数其实就是个if else语句,函数语法规则如下

IFNULL(expr1, expr2)
1

伪代码逻辑如下:

if expr1 == null:
   return expr2;
else:
   return expr1;
1
2
3
4

执行两条SQL语句实践下更有助于理解:

ifnull-sql-demo-image-20190512095828594

对于我们这道题SQL应该这样写:

SELECT IFNULL((SELECT DISTINCT(Salary) FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1), null) AS SecondHighestSalary;
1

我们来测试下:

1 - 正常的数据,有各种薪资:

image-20190512100622340

2 - 所有人薪水都相同的情况:

image-20190512100717179

3 - 空表的情况:

image-20190512100808599

所有测试通过~


这道题虽然标记为简单题目,但是提交通过率却不高,仅有1/3。

image-20190512100927779

说明还是有不少同学和我一样对SQL对掌握不够呀,还是要找时间好好学习使用下。

题目链接在这里:https://leetcode-cn.com/problems/second-highest-salary/

有兴趣对小伙伴可以试试其他数据库的SQL语句怎么写,欢迎交流讨论。

#leetcode#SQL
上次更新: 7/26/2026, 3:17:15 PM
一图看懂正则表达式
基于Druid的接口测试自动化方案

← 一图看懂正则表达式 基于Druid的接口测试自动化方案→

最近更新
01
测试覆盖度量全景图
11-30
02
Prism测试覆盖度量
11-30
03
AITDBClient使用文档
11-15
更多文章>
Theme by Vdoing | Copyright © 2021-2026 toddlerya | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式