【LeetCode-SQL每日一练】——2. 第二高的薪水

🎈写在前面

  🙋‍♂️大家好呀,我是超梦。小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。接下来小梦会带领小伙伴们一起每天刷一道LeetCode-数据库(SQL)相关的题目,然后在文章后例举相关知识点帮助小伙伴们学习与巩固,更好的掌握SQL。

       🙋‍♂️ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。


目录

题目概述

解题思路

方式一

方式二

力扣官方解析

代码实现

知识点总结

limit子句

ifnull函数


题目概述

 Employee 表

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

题目

  • 📃编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary),如果不存在第二高的薪水,那么查询应返回 null
  • 例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

👇LeetCode原题地址,点击进入~


解题思路

方式一

  1. 首先我们先写一个select查询语句,查出Employee表中最高的薪水。
select max(salary) from Employee;

     2. 然后我们把第一步的查询语句作为一个子句,我们通过where条件,使salary小于该子句得到的最高薪水。简单来讲就是我查询到一个小于最高的薪水的最高薪水,不就是第二高薪水嘛。

select max(salary) from Employee 
where 
salary < (select max(salary) from Employee);

    3. 接下来我们根据题意还需要做一个null判断,如果不存在第二高薪水,就返回null值。这里我们用到了ifnull函数(文章知识点总结部分会有对ifnull函数的讲解哦~)。

题解:

select ifnull((
select max(salary) from Employee 
where 
salary < (select max(salary) from Employee)),null)
as SecondHighestSalary;

方式二

  1. 首先我们将salary字段进行降序排序。
  2. 通过distinct将alary中的值去重。这里可能会有小伙伴们问了,employee表中salary没有重复的值呀为什么要加去重操作?小梦跟小伙伴们说一下,题目表中数据量很少,当数据量大的时候我们不能保证没有相同数据。当出现重复数据而我们没有进行去重操作,那我们通过降序排序也无法判断第二高的数据在哪一位置。当进行去重操作后,我们通过降序排序就能很清楚的知道第二高的数据就是排在第二位。所以为了谨慎与正确性,我们需要加上distinct。
  3. 通过以上去重排序操作后,我们很清楚的知道第二高的薪水就是排在第二位,再通过limit 1,1或者limit 1 offset1来查询出第二高的薪水。(limit1,1:前面的那一个1意思是跳过一条数据,后面的1是取一个数据,意思就是跳过一个数据,从第二条数据开始取一条数据。)(limit 1 offset 1:前面那个1意思是取一个数据,后面那一个1是跳过一条数据,整个意思就是跳过一个数据,从第二条数据开始取一条数据。
  4. 接下来我们根据题意还需要做一个null判断,如果不存在第二高薪水,就返回null值。

题解:

##limit
selectifnull((select distinct Salaryfrom Employeeorder by Salary desclimit 1,1), null) as SecondHighestSalary;## limit offset
selectifnull((select distinct Salaryfrom Employeeorder by Salary desclimit 1 offset 1), null) as SecondHighestSalary;

力扣官方解析

👉

方法一:使用子查询和 LIMIT 子句

将不同的薪资按降序排序,然后使用 LIMIT 子句获得第二高的薪资。

SELECT DISTINCTSalary AS SecondHighestSalary
FROMEmployee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1

然而,如果没有这样的第二最高工资,这个解决方案将被判断为 “错误答案”,因为本表可能只有一项记录。为了克服这个问题,我们可以将其作为临时表。

SELECT(SELECT DISTINCTSalaryFROMEmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1) AS SecondHighestSalary

方法二:使用 IFNULL 和 LIMIT 子句

SELECTIFNULL((SELECT DISTINCT SalaryFROM EmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1),NULL) AS SecondHighestSalary

代码实现

方式一

select ifnull((
select max(salary) from Employee 
where 
salary < (select max(salary) from Employee)),null)
as SecondHighestSalary;

 输出与预期结果一致,答题成功!

方式二

limit

selectifnull((select distinct Salaryfrom Employeeorder by Salary desclimit 1,1), null) as SecondHighestSalary;

 输出与预期结果一致,答题成功!

 

 limit offset

SELECTIFNULL((SELECT DISTINCT SalaryFROM EmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1),NULL) AS SecondHighestSalary

 输出与预期结果一致,答题成功!


知识点总结

limit子句

我们来简单回顾一下limit与limit offset的知识点,要常常温故而知新~

  1. limit n 分句表示: 读取 n 条数据
  2. limit n, m 分句表示: 跳过 n 条数据,读取 m 条数据
  3. limit n 等价于 limit 0,n
  4. limit m offset n 分句表示: 跳过 n 条数据,读取 m 条数据

ifnull函数

通过今天这一题,相信小伙伴们对ifnull函数也有些认识了。

ifnull(expression ,y)函数解释:

如果第一个参数的表达式 expression 为 NULL,则返回第二个参数y的值(此题中是返回null值)。

如果第一个参数的表达式 expression 为 不为NULL,则返回第一个参数表达式expression的值。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode-SQL每日一练】—— 181. 超过经理收入的员工

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。小伙伴们都知道&#xff0c;不管是在学习中还是日常工作中&#xff0c;几乎天天是要跟数据库打交道的&#xff0c;为了更好的操作数据库&#xff0c;我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

【windows环境——VSCode安装教程】

大家好呀&#xff01;我是超梦&#xff0c;今天给小伙伴们带来一个最新版在windows环境的VSCode安装教程&#xff0c;话不多说我们开始吧。 VSCode安装下载与安装设置中文环境下载与安装 1. 第一步&#xff0c;进入官网&#xff0c;根据自己的电脑位数选择下载&#xff0c;小梦…

C#通用类Helper整理

★前言 最近下载了tita_chou在CSDN上传的一个资源&#xff0c;是在工作中整理的C#帮助类&#xff0c;里面包含了很多实用的类&#xff0c;想到我之前收集过自己用到少的可怜的类&#xff0c;心生敬意啊。当粗略的查看了那个资源&#xff0c;发现有一些是重复的&#xff0c;有一…

【LeetCode-SQL每日一练】—— 182. 查找重复的电子邮箱

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。小伙伴们都知道&#xff0c;不管是在学习中还是日常工作中&#xff0c;几乎天天是要跟【数据库】打交道的&#xff0c;为了更好的操作数据库&#xff0c;我们的SQL【知识储备】是必不可少的。想要掌握…

【你会用代码画年兽吗】20行代码使用JS实现虎年春节倒计时 —— 红红火火过虎年

&#x1f34a;前言 &#x1f34a;哈喽小伙伴们好呀&#xff0c;我是超梦&#xff0c;大家可以叫我小梦~&#xff0c;马上就要过虎年春节啦&#xff0c;在新的一年里祝愿大家&#x1f42f;身体健康&#xff0c;&#x1f42f;平平安安&#xff0c;&#x1f42f;虎气冲天&#xf…

【LeetCode-SQL每日一题】——183. 从不订购的客户

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。小伙伴们都知道&#xff0c;不管是在学习中还是日常工作中&#xff0c;几乎天天是要跟数据库打交道的&#xff0c;为了更好的操作数据库&#xff0c;我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

c#进阶(1)—— Task Parallel Library 并行执行与串行执行

本文参考的博文出处&#xff1a;http://www.cnblogs.com/stoneniqiu/p/4857021.html 总体说明&#xff1a; &#xff08;1&#xff09;、理解硬件线程和软件线程 硬件线程也称为逻辑内核&#xff0c;一个物理内核可以使用超线程技术提供多个硬件线程。所以一个硬件线程并不代…

【leetcodeMySQL每周一练】- 5道题带你练习mysql

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。小伙伴们都知道&#xff0c;不管是在学习中还是日常工作中&#xff0c;几乎天天是要跟数据库打交道的&#xff0c;为了更好的操作数据库&#xff0c;我们的SQL知识储备是必不可少的。想要掌握好SQL&am…

【读书笔记】.Net并行编程高级教程--Parallel

一直觉得自己对并发了解不够深入&#xff0c;特别是看了《代码整洁之道》觉得自己有必要好好学学并发编程&#xff0c;因为性能也是衡量代码整洁的一大标准。而且在《失控》这本书中也多次提到并发&#xff0c;不管是计算机还是生物都并发处理着各种事物。人真是奇怪&#xff0…

【除夕最炫烟花代码】—— HTML+JQuery实现2022跨年烟花特效

&#x1f387;前言 大家好呀&#xff01;我是小梦是✨。 除夕马上到来&#xff0c;激动的心颤动的手&#xff01;今年由于管控严厉&#xff0c;许多地方禁止燃放烟花爆竹&#xff0c;既然不让我们放&#xff0c;那我们就用代码来实现烟花特效&#xff01; 文末有彩蛋哦~ 烟花效…

【LeetCode-SQL每日一练】—— 595. 大的国家

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。大家可以叫我小梦~ 小伙伴们都知道&#xff0c;不管是在学习中还是日常工作中&#xff0c;几乎天天是要跟数据库打交道的&#xff0c;为了更好的操作数据库&#xff0c;我们的SQL知识储备是必不可少的…

c#进阶(2)—— ASP.NET MVC 常用路由总结

1、URL模式 路由系统用一组路由来实现它的功能&#xff0c;这些路由共同组成了应用系统URL架构或方案&#xff0c;这种URL架构是应用程序能够识别并能对之做出响应的一组URL&#xff0c;当处理一个输入 请求时&#xff0c;路由系统的工作是将这个请求URL与一个模式进行匹配&am…

【爱心代码大全】——情人节表白代码送给她属于我们程序员的浪漫

&#x1f474;大多数人以为的程序员——发量少&#xff0c;身穿格子褂&#xff0c;坐在电脑前就是码字。一点也不懂浪漫&#xff01; 谁说我们不懂浪漫的&#xff1f; 不&#xff01; 你错了 程序员一旦浪漫起来&#xff0c;真没其他人啥事了&#xff01;&#xff01;&#xff…

c#进阶(4)—— Redis 用于消息队列的存储

1、参考的博文 a : http://www.cnblogs.com/lori/archive/2012/04/12/2443708.html —— 主要的实现思路 b: http://www.cnblogs.com/liqingwen/archive/2017/04/06/6672452.html —— RedisHelper 类 c : https://www.cnblogs.com/stopfalling/p/5375492.html —— 应用场…

【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦。大家可以叫我小梦~ 小伙伴们都知道&#xff0c;不管是在学习中还是日常工作中&#xff0c;几乎天天是要跟数据库打交道的&#xff0c;为了更好的操作数据库&#xff0c;我们的SQL知识储备是必不可少的…

【情人节表白代码】——情人节将至,10余款浪漫爱心特效送给你爱的那个她

谁说我们不懂浪漫的&#xff1f; 不&#xff01; 你错了 程序员一旦浪漫起来&#xff0c;那就是个bug&#xff01;&#xff01;&#xff01; 浪漫表白一 代码部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/…

c#进阶(6)—— 网络通信基础知识

1、HttpClient 类 (1)、HttpClient 类 用于发送HTTP 请求&#xff0c;接收请求的响应。 (2)、HttpClient 类 派生于 HttpMessageInvoker类&#xff0c;此基类负责执行 SendAsync(),SendAsync() 方法调用是异步的&#xff0c;可以编写一个完全异步的系统来调用Web服务。 2、实…

【云原生】—— 学习云计算应用开发你需要掌握的五大技能

学习云计算应用开发之前&#xff0c;我们首先了解一下什么是云计算。 云计算百度百科&#xff1a;云计算&#xff08;cloud computing&#xff09;是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序&#xff0c;然后&#xff0c;…

c#进阶(5)—— WCF 实现简单预订功能

1、WCF概述 WCF全称为Windows Communication Foundation,在.Net 3.0 中引入&#xff0c;用于客户端与服务端通信&#xff0c;替换了之前的一些技术&#xff0c;如.Net Remoting 及 WSE。 WCF 相比ASP.NET Web API 复杂&#xff0c;但提供了更多的功能&#xff0c;如 &#x…

云原生架构重要组成部分之微服务

前言 近几年来&#xff0c;云计算与微服务架构非常火&#xff0c;运用广泛。各大厂商公司都运用了该技术架构&#xff0c;随着技术与理念的升级迭代&#xff0c;云原生概念应世而起&#xff0c;现在火的一塌糊涂。做为新时代的程序员&#xff0c;我们要抓住云原生的浪潮。 这篇…