力扣数据库题库学习(5.11日)--176. 第二高的薪水

176. 第二高的薪水

问题链接

分析

题目要求:
查询并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null
下面是示例:

查询结果如下例所示。
示例 1:

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
示例 2:

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null                |
+---------------------+

其实这道题是一个简单的排序取值问题。我们知道,在mysql内可以使用ORDER BY排序,并使用LIMIT 参数,就可以获取排序的结果。但是这道题,要求的是第2高的数据,这样简单的LIMIT就满足不了需求。我们不妨可以这样想,取第二个数据,其实就是跳过第一个数据,取下一个值。这个在mysql内,可以使用OFFSET实现。
下面我来给出解题思路:

  1. 使用 ORDER BY 将薪水降序排列。
  2. 使用 LIMIT 获取第二行的薪水。
  3. 如果第二行存在,则返回该薪水值;否则返回 NULL。

实现代码之前,我们来熟悉/学习一下OFFSET的使用方法

OFFSET使用方法详解

OFFSET 是 SQL 查询中用于指定结果集开始位置的子句。它通常与 LIMIT 结合使用,用于分页查询或者从指定位置开始获取数据。

从指定位置开始获取数据

SELECT column1, column2, ...
FROM table_name
OFFSET offset_value;

offset_value:要跳过的行数,即结果集开始的位置。

OFFSET 子句的取值范围是非负整数。
如果指定的 OFFSET 值大于结果集的行数,将不会返回任何行。
如果 OFFSET 的值为 0,则从结果集的第一行开始返回数据。
如果不指定 LIMIT,则 OFFSET 将从指定位置开始返回数据,直到结果集的末尾。
SELECT *
FROM students
OFFSET 2;

这个查询将会从 students 表中的第三行开始返回数据,因为 OFFSET 子句指定了要跳过的行数为 2,即跳过前两行。

看过了OFFSET的使用方法之后,我们来构造这个SQL语句

思路

要求是取第二高的薪水==>将数据倒序排列,并跳过第一个数据,取第二个数据

SELECT DISTINCT salary AS SecondHighestSalary
FROM Employee
ORDER BY salary DESC
LIMIT 1 OFFSET 1;

因为这里salary可能会重复,所以我使用DISTINCT 去重操作。

将这个语句进行测试
在这里插入图片描述
解答报错!😭😭😭
题目要求当没有第二高的数据时,返回NULL,但是代码执行之后没有返回数据。看来是代码出现了一些问题。
要解决这个问题其实也很容易,我们判断一下原代码的执行结果,如果没有结果就返回NULL即可。
这里可以使用子查询实现,具体代码如下:

SELECT 
    (SELECT DISTINCT salary 
     FROM Employee 
     ORDER BY salary DESC 
     LIMIT 1 OFFSET 1) AS SecondHighestSalary;

将原来的查询语句作为子查询的条件,并将结果查询出来即可。

其实我们还可以使用MYSQL里面的IFNULL函数实现,具体的代码实现如下:

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

当子查询结果为NULL时,我们将函数的返回结果设置为NULL再查询出来即可。

解答

我觉得简洁高效的代码还是第一个,在这里:

SELECT 
    (SELECT DISTINCT salary 
     FROM Employee 
     ORDER BY salary DESC 
     LIMIT 1 OFFSET 1) AS SecondHighestSalary;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/613686.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java——类与对象

目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 二、类的定义与使用 2.1 简单认识类 2.2 类的定义格式 三、类的实例化 3.1 什么是实例化 3.2 类和对象的说明 四、this引用 4.1 为什么要有this引用 4.2 什么是this引用 ​编辑 4.3 this引用…

verilog中输入序列连续的序列检测

编写一个序列检测模块,检测输入信号a是否满足01110001序列,当信号满足该序列,给出指示信号match。 模块的接口信号图如下: 代码如下: (CSDN代码块不支持Verilog,代码复制到notepad编辑器中&am…

pytest + yaml 框架 - 录制接口转 yaml 用例实现

pytest yaml 框架基本不用写 python 代码,只需写yaml 文件用例就能实现接口自动化。 现在引入接口录制功能,连 yaml 文件也不用写了,点点点就能生成 yaml 用例文件了。 录制功能在v1.3.4版本上实现 pip instal pytest-yaml-yoyo 环境准备 …

基于RFID的博物馆藏品管理系统

传统的博物馆藏品管理主要依赖人工记录和物理检查,这样的管理方式耗时耗力,并且容易出现记录错误。另外,对于藏品的定位和监控也存在一定的局限性。 RFID是一种无线通信技术,通过无线电频率识别标签上存储的信息,实现物…

代码随想录第五十天|最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费

题目链接:. - 力扣(LeetCode) 最佳买卖股票时机含冷冻期与打家劫舍的题目有异曲同工之妙,主要是出现了天数的间隔,一次需要在买卖股票的最佳时机II 题目上做一点调整,代码如下: 如代码所示&…

24数维杯ABC题思路已更新!!!!

24数维杯A题保姆级思路+配套代码+后续参考论文 简单麦麦https://www.jdmm.cc/file/2710639/ 24数维杯B题保姆级思路+可执行代码+后续参考论文 简单麦麦https://www.jdmm.cc/file/2710640/ 24数维杯C题保姆级思路+可执…

在wine里启动Arctium Game Launcher.exe

尝试在wine里启动Arctium Game Launcher.exe 第一次直接启动wine Arctium Game Launcher.exe,结果报错,因为字符的因素,看不出是为啥报错。不过一般是c库有些问题。 为了安装c库,尝试了下载Visual c 安装,失败。尝试…

Windows 11 Manager (Win11系统优化大师) 中文破姐版 v1.4.3

01 软件介绍 ​Windows 11 Manager v1.4.3是一款综合性的系统优化工具,专为Win11设计。该工具包含超过40种功能,旨在全方位提升操作系统的性能。通过这些工具,用户可以对Windows 11进行深度优化和微调,清除不必要的文件&#xff…

FileLink跨网文件传输医疗行业解决方案

随着医疗行业的快速发展,医疗机构之间的信息共享和文件传输需求日益增加。然而,由于网络环境的复杂性和数据安全性的要求,传统的文件传输方式已经无法满足医疗行业的需求。为此,我们推出了FileLink跨网文件传输医疗行业解决方案&a…

矿用泄爆装置之——水封式防爆器使用说明

矿用泄爆装置之——水封式防爆器使用说明。 在这个快节奏的时代,您需要一款能够与您一同成长,满足您需求的产品。我们为您带来的不仅仅是一件产品,更是一份属于您不一样的新体验。【1-5-9】 一、水封式防爆器产品使用介绍 安装在抽放瓦斯泵进…

interview_bak

flink内存管理 JVM 存在的几个问题: Java 对象存储密度低。一个只包含 boolean 属性的对象占用了16个字节内存:对象头占了8个,boolean 属性占了1个,对齐填充占了7个。而实际上只需要一个bit(1/8字节)就够了。Full GC 会极大地影响性能,尤其是为了处理更大数据而开了很大…

QT---day5,通信

1、思维导图 2、TCp 服务器 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QTcpServer> #include <QList> #include <QTcpSocket> #include <QMessageBox> #include <QDebug> #include <QTcpServer> QT_B…

【C#】 SortedDictionary,查找字典中是否存在给定的关键字

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景场景说明红黑树原理判断代码Dictionary知识点相关文章 背景 最近…

创新案例|搜索新王Perplexity如何构建生成式AI产品开发的新模式

Perplexity AI&#xff1a;生成式搜索的颠覆者 刚刚成立满两年&#xff0c;Perplexity AI已经变成了我日常频繁使用的工具&#xff0c;甚至取代了我对 Google搜索的依赖 —— 而我并非个案。该公司仅凭不到 50 名员工&#xff0c;已经吸引了数千万用户。他们目前的年收入超过 …

Linux中的httpd服务简单应用,配置网页版显示

1.启动服务 2.开放端口或者关闭防火墙 3.删除欢迎网页 4.创建自己的目录和文件 5.登录查看

[已解决]ModuleNotFoundError: No module named ‘tqdm‘

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《AI实战中的各种bug…

Vuex核心概念-state状态

目录 一、目标 二、提供数据 三、使用数据 1.通过store直接访问 2.通过辅助函数&#xff08;简化&#xff09; 一、目标 明确如何给仓库提供数据&#xff0c;如何使用仓库的数据 二、提供数据 State提供唯一的公共数据源&#xff0c;所有共享的数据都要统一放到Store中的…

superset与metabase调研比较

BI工具是什么&#xff1f; 百度百科是这么解释的&#xff1a; 商业智能&#xff08;Business Intelligence&#xff0c;简称&#xff1a;BI&#xff09;&#xff0c;又称商业智慧或商务智能&#xff0c;指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数…

信创 | 信创引领:打造高品质居民生活新篇章

信创产业的发展对于打造高品质居民生活具有重要意义。首先&#xff0c;信创产业的迅速发展能够提高人们的生活品质&#xff0c;推动社会朝着信息化、数字化方向进步。这一点在多个方面得到了体现&#xff0c;例如&#xff0c;通过自主可控的信创产业链的初步形成&#xff0c;居…

React - sass配置

1. idea下载Easy Sass插件&#xff1a; 2. 启用后&#xff0c;我们写的scss文件不能直引用&#xff0c;所以还要下载sass依赖&#xff1a; (推荐使用.scss&#xff0c;因为与原生.css写法接近&#xff0c;.sass格式更严格) // 下载sass依赖 npm install sass sass-loader --s…