力扣刷MySQL-第三弹(详细讲解)

 🎉欢迎您来到我的MySQL基础复习专栏

☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:力扣刷题讲解-MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️

​​

目录

 🚀删除重复电子邮箱

 🚀上升的温度


🚀删除重复电子邮箱

表: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+
id 是该表的主键列(具有唯一值的列)。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id 的唯一电子邮件。

(对于 SQL 用户,请注意你应该编写一个 DELETE 语句而不是 SELECT 语句。)

运行脚本后,显示的答案是 Person 表。驱动程序将首先编译并运行您的代码片段,然后再显示 Person 表。Person 表的最终顺序 无关紧要 。

返回结果格式如下示例所示。

示例 1:

输入: 
Person 表:
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
输出: 
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+
解释: john@example.com重复两次。我们保留最小的Id = 1。

解法一:

1.分组

2.首先,题目也提示删除我们要用delete,而不是select

3.众所周知,delect不能删除某个字段的值,这点很重要,温习一下

4.要求是保留每个唯一电子邮件地址对应的最小 id。自然地,我们可以考虑使用 group by 方法来实现这一点。

5.Person.group by('email') 将根据 email 列中的唯一值对 Person 进行分组。我们根据 email 列中的唯一值将 Person 分成多个组。

6.这种分组允许我们将具有相同 email 的行分组在一起,以便我们可以分别对每个组进行操作。

7.那么我们接下来实现一下

8.select * from person group by email (给邮件分组)

9.那么分组之后的情况就是,组1是john@example.com和john@example.com,组2是bob@example.com

10.那么我们再查找每个组唯一的电子邮件的最小id,用到了聚合函数

11.select min(id) from person group by email

12.然后我们要去选择最小的id的值也就是min(id),我们最好给它起一个别名,但最好不要是id,如果是id,因为我们等一下要在它外面还要套一个select去查询这个id,所有很容易与表中的id弄混,我们这里给它起名为id1

13.之后我们在外面套一个select,去查询这个最小id

14.select id1 from (SELECT MIN(id) AS id1 FROM Person GROUP BY email)

15.除此之外我们就想到了用not in,不在这个id1只能的数,我们给它删了,很明显每个组最小的id就是一个是1,一个是2,那么3不是1和2,那么我们就删了,用where

16.SELECT id1 FROM (SELECT MIN(id) AS id1 FROM Person GROUP BY email)

17.DELETE FROM Person WHERE id NOT IN (SELECT id1 FROM (SELECT MIN(id) AS id1 FROM Person GROUP BY email)AS temp);

18.很多人看不懂为什么外面好像多套了一个select,不能没有这个嘛?

19.不能写成

DELETE FROM Person
WHERE id NOT IN (SELECT MIN(id) AS id1FROM PersonGROUP BY email
);

20.不行,这样会报错,因为删除和查询不能同时作用在一张表,如果您在查询中使用了与删除操作相同的表,可能会导致不可预测的结果。这是因为,在 MySQL 中,删除操作会立即从表中删除符合条件的行。因此,如果您在查询中使用了一个已经被删除的行,那么查询结果就会不正确。

21.此时我们就可以用套一个子查询的办法,包装一下避免这个错误,同时也要取上别名

22.即下面的代码,AS temp其实也就是一个伪装

DELETE FROM Person
WHERE id NOT IN (SELECT id1 FROM (SELECT MIN(id) AS id1FROM PersonGROUP BY email) AS temp
);

 方法二:

自连接,且使用 DELETE 和 WHERE 子句
实现

通过将此表与自身在 Email 列上连接,我们可以得到以下代码。

SELECT p1.*
FROM Person p1,Person p2
WHEREp1.Email = p2.Email ;

然后,我们需要找到具有相同电子邮件地址的其他记录中较大的 id。因此,我们可以在 WHERE 子句中添加一个新条件,如下所示。

SELECT p1.*
FROM Person p1,Person p2
WHEREp1.Email = p2.Email AND p1.Id > p2.Id ;

因为我们已经得到了要删除的记录,所以我们可以将这个语句改为 DELETE。

DELETE p1 FROM Person p1,Person p2
WHEREp1.Email = p2.Email AND p1.Id > p2.Id

作者:力扣官方题解
链接:https://leetcode.cn/problems/delete-duplicate-emails/solutions/2366230/shan-chu-zhong-fu-de-dian-zi-you-xiang-b-8e7p/
来源:力扣(LeetCode)

 🚀上升的温度

表: Weather

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| recordDate    | date    |
| temperature   | int     |
+---------------+---------+
id 是该表具有唯一值的列。
该表包含特定日期的温度信息

编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的 id 。

返回结果 无顺序要求 。

结果格式如下例子所示。

示例 1:

输入:
Weather 表:
+----+------------+-------------+
| id | recordDate | Temperature |
+----+------------+-------------+
| 1  | 2015-01-01 | 10          |
| 2  | 2015-01-02 | 25          |
| 3  | 2015-01-03 | 20          |
| 4  | 2015-01-04 | 30          |
+----+------------+-------------+
输出:
+----+
| id |
+----+
| 2  |
| 4  |
+----+
解释:
2015-01-02 的温度比前一天高(10 -> 25)
2015-01-04 的温度比前一天高(20 -> 30)

解题思路:

首先,我们需要找到每一天与前一天的温度比较情况。这可以通过自连接(self-join)来实现,即将 Weather 表与自身连接,以便比较相邻日期的温度情况。

  1. 自连接表: 首先,我们对 Weather 表进行自连接,以便能够比较相邻日期的温度情况。我们将使用 w1 和 w2 作为表的别名,分别代表连接中的两个不同实例。

    SELECT w1.id AS w1_id, w1.recordDate AS w1_date, w1.temperature AS w1_temp,w2.id AS w2_id, w2.recordDate AS w2_date, w2.temperature AS w2_temp
    FROM Weather w1
    JOIN Weather w2 ON DATEDIFF(w2.recordDate, w1.recordDate) = 1;
    

    这将返回一个结果集,其中包含了相邻日期的温度信息。

  2. 筛选条件: 我们需要进一步筛选出温度更高的日期。

    WHERE w2.temperature > w1.temperature
    

    这个条件将确保只有当后一天的温度高于前一天时才会被选择。

  3. 最终结果: 最后,我们只需选择符合条件的日期的 id。

    SELECT w2.id
    FROM Weather w1
    JOIN Weather w2 ON DATEDIFF(w2.recordDate, w1.recordDate) = 1
    WHERE w2.temperature > w1.temperature
    

    这将给出所有温度比前一天更高的日期的 id。

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

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

相关文章

JVM中的垃圾收集算法

标记-清除算法 首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。标记过程就是对象是否属于垃圾的判定过程 缺点 第一个是执行效率…

【算法基础 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理)

文章目录 为什么需要逆元逆元的概念1.单位元2.逆元3.模乘的单位元4.模乘的逆元 开始求逆元1.扩展欧几里得定理2.费马小定理 原文链接 为什么需要逆元 首先,在算法竞赛中,很多情况下会遇到数值很大的数据,这个时候,题目往往会让我…

C# 获取QQ会话聊天信息

目录 利用UIAutomation获取QQ会话聊天信息 效果 代码 目前遇到一个问题 其他解决办法 利用UIAutomation获取QQ会话聊天信息 效果 代码 AutomationElement window AutomationElement.FromHandle(get.WindowHwnd); AutomationElement QQMsgList window.FindFirst(Tr…

4.postman批量运行及json、cvs文件运行

一、批量运行collection 1.各个接口设置信息已保存,在collection中点击run collection 2.编辑并运行集合 集合运行时,单独上传图片时报错。需修改postman设置 二、csv文件运行 可新建记事本,输入测试数据,后另存为新的文本文件&…

Pytest 结合 Allure 生成测试报告

测试报告在项目中是至关重要的角色,一个好的测试报告: 可以体现测试人员的工作量; 开发人员可以从测试报告中了解缺陷的情况; 测试经理可以从测试报告中看到测试人员的执行情况及测试用例的覆盖率; 项目负责人可以通过…

c#之函数

1. 定义一个函数,用来取得数字的和,但是数字的个数不确定 (1) class Program{static int Sum(int[] array){int num 0;for (int i 0; i < array.Length; i){num num array[i];}return num;}static void Main(string[] args){int sum Sum(new int[]{12,13,34,5,68,9,9…

echarts-wordcloud词云

echarts-wordcloud是基于echarts的一个插件&#xff0c;所以我们要首先安装echarts包&#xff0c;然后再安装echarts-wordcloud的包&#xff0c;这里我的练习项目安装的版本&#xff1b;当然&#xff0c;你可以随意安装你需要的版本&#xff1b; “echarts”: “^5.3.3”, “ec…

Hive架构设计

我们知道MapReduce和Spark它们提供了高度抽象的编程接口便于用户编写分布式程序,它们具有极好的扩展性和容错性,能够处理超大规模的数据集。这些计算引擎提供了面向高级语言(比如Java,Python等)的编程接口,然而,考虑到分布式程序编写的复杂性,直接使用这些编程接口实现…

Django中解决跨域问题

同源策略&#xff08;Same origin policy&#xff09;是一种约定&#xff0c;它规定了 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同&#xff0c;如果不一致&#xff0c;请求会发送成功&#xff0c;后端会正常响应&#xff0c;但是浏览器会拦截 …

面试2024.1.20

简单介绍下你做的项目。 这个神领物流项目是一个前后端分离的项目&#xff0c;前段他有3个客户端&#xff08;用户端为微信小程序、司机端和快递员端为app&#xff09;一个管理端&#xff08;pc&#xff09;&#xff0c;后端用的技术栈用的是SpringAlibabaCloud、数据库用的是M…

【精选】中间件 tomcat漏洞复现

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

JRTP实时音视频传输(2)-使用TCP通信的案例

环境搭建等参考&#xff1a;JRTP实时音视频传输(1)-必做的环境搭建与demo测试 1.创建自己的demo 先将example1拷贝为myclienttcp.cpp和myservertcp.cpp cp example1.cpp myclienttcp.cpp cp example1.cpp myservertcp.cpp 改写jrtplib/JRTPLIB/examples/CMakeLists.txt&…

79、avx2 向量指令集优化卷积运算

上一节 介绍了 avx2 向量指令集中的 load/store 操作,本节介绍如何使用 avx2 的向量指令集来实现乘累加运算。 因为我们实战中用到的 resnet50 神经网络中,卷积运算在整个模型中的比例占据是相当高,而卷积运算的核心计算就是乘累加计算。因此,只要将最核心的乘累加计算效率…

2024成都线路板展览会|全国线路板展

时 间&#xff1a;2024年7月17&#xff5e;19日 地 点&#xff1a;成都世纪城新国际会展中心 ◆ 》》》展会概况&#xff1a; 电路板是电子产品的关键电子互联件&#xff0c;被誉为“电子产品之母”。电路板行业作为电子信息产业中重要的组成部分&#xff0c;受到国家产…

怎么从视频中提取动图?一个方法快速提取gif

视频以连续的方式播放一系列图像帧&#xff0c;通过每秒播放的帧数&#xff08;帧率&#xff09;来创做&#xff0c;由于GIF动图则以循环播放一系列静态图像帧的方式展现动画效果。由于视频的优势在于流畅的动画、丰富的细节和长时间播放&#xff0c;因此常用于电影、电视节目、…

React Hooks 基本使用

背景 class 组件如果业务复杂&#xff0c;很难拆分和重构&#xff0c;很难测试&#xff1b;相同业务逻辑分散到各个方法中&#xff0c;逻辑混乱逻辑复用像HOC、Render Props&#xff0c;不易理解&#xff0c;学习成本高React提倡函数式编程&#xff0c;函数更易拆分&#xff0…

如何在 Ubuntu / Raspbian 上安装 MariaDB

Raspberry Pi OS&#xff08;原为Raspbian&#xff09;是为树莓派基于Debian开发的操作系统。 从2015年起&#xff0c;树莓派基金会正式将其作为树莓派的官方操作系统。 Raspbian是由Mike Thompson和Peter Green创建的一个独立项目。第一个版本于2012年6月发布&#xff0c;至…

LP-AM243x EtherNet/IP 连接施耐德 M241 EIP主站测试

硬件环境&#xff1a;LP-AM243x 开发板 施耐德 Modicon M241 软件环境&#xff1a; INDUSTRIAL-COMMUNICATIONS-SDK-AM243X MCU-PLUS-SDK-AM243X — MCU SDK for AM243x 调试过程&#xff1a; 首先&#xff0c;让AM243x能够运行 Null Boot&#xff0c; Starting NULL Boo…

大数据小白初探Hbase从零到入门

目录 1.前言 2.初识Hbase 2.1 有了HDFS为什么还需要HBase呢? 2.2 HBase主要做什么的? 2.3 HBase架构特点? 2.4 HBase的适用场景? 2.5 HBase的数据模型和物理储存格式? 2.5.1 逻辑表结构 2.5.2 物理存储 2.5.3 分布式集群框架部署图 2.5.4 HBase的逻辑本质: 2…

Python 循环结构练习-穷举法

穷举法&#xff1a;穷尽所有的可能性&#xff0c;然后设置条件&#xff0c;找到问题的解 —> 暴力破解法 题目1&#xff1a;鸡翁一值钱5&#xff0c;鸡母一值钱3&#xff0c;鸡雏三值钱1&#xff0c;用百钱买百鸡&#xff0c;问鸡翁、鸡母、鸡雏几何。 实现&#xff1a; …