【LeetCode高频SQL50题-基础版】打卡第9天:第46~50题

news2024/11/18 20:32:18

文章目录

  • 【LeetCode高频SQL50题-基础版】打卡第9天:第46~50题
    • ⛅前言
    • 患某种疾病的患者
      • 🔒题目
      • 🔑题解
    • 第二高的薪水
      • 🔒题目
      • 🔑题解
    • 按日期分组销售产品
      • 🔒题目
      • 🔑题解
    • 列出指定时间段内所有的下单产品
      • 🔒题目
      • 🔑题解
    • 查找拥有有效邮箱的用户
      • 🔒题目
      • 🔑题解

【LeetCode高频SQL50题-基础版】打卡第9天:第46~50题

⛅前言

  在这个博客专栏中,我将为大家提供关于 LeetCode 高频 SQL 题目的基础版解析。LeetCode 是一个非常受欢迎的编程练习平台,其中的 SQL 题目涵盖了各种常见的数据库操作和查询任务。对于计算机科班出身的同学来说,SQL 是一个基础而又重要的技能。不仅在面试过程中经常会遇到 SQL 相关的考题,而且在日常的开发工作中,掌握 SQL 的能力也是必备的。

  本专栏的目的是帮助读者掌握 LeetCode 上的高频 SQL 题目,并提供对每个题目的解析和解决方案。我们将重点关注那些经常出现在面试中的题目,并提供一个基础版的解法,让读者更好地理解问题的本质和解题思路。无论你是准备找工作还是提升自己的技能,在这个专栏中,你可以学习到很多关于 SQL 的实践经验和技巧,从而更加深入地理解数据库的操作和优化。

  我希望通过这个专栏的分享,能够帮助读者在 SQL 的领域里取得更好的成绩和进步。如果你对这个话题感兴趣,那么就跟随我一起,开始我们的 LeetCode 高频 SQL 之旅吧!

  • 博客主页💖:知识汲取者的博客
  • LeetCode高频SQL100题专栏🚀:LeetCode高频SQL100题_知识汲取者的博客-CSDN博客
  • Gitee地址📁:知识汲取者 (aghp) - Gitee.com
  • 题目来源📢:高频 SQL 50 题(基础版) - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

患某种疾病的患者

🔒题目

题目来源:1527.患某种疾病的患者

image-20231014173531804

🔑题解

  • 考察知识点
select min(id), email
from Person
group by email;

PS:时隔两天又遇到 LeetCode 的Bug了,我在本地运行这个SQL可以过,但是在LeetCode运行无法通过,测试数据居然 group by都没有进行去重,上次也遇到这个LeetCode的Bug了,害我还思考了很久,这次我留心了

结果发现是我题目没看清楚🤣,题目要求是删除,我直接下意识搞一个查询去了😑

正确的SQL:

delete from Person
where id not in (
  select min(id)
  from Person
  group by email
);

结果报错:You can't specify target table 'Person' for update in FROM clause

哎呀😟查询SQL写多了,删除SQL不会写了😑

这个报错的原因是:MySQL不允许在子查询中直接引用待更新的目标表导致的,所以需要使用自连接

delete p from Person p
left join (
  select min(id) id
  from Person
  group by email
) t 
on p.id = t.id
where t.id is null;

还有一种更见简洁的方式,使用自连接:一旦判断两条记录的邮箱相同,直接删除id较大的那条记录

delete p1 from Person p1, Person p2
where p1.email = p2.email and p1.id > p2.id;

PS:第一种写法的性能要更加高,因为第一条SQL是作笛卡尔积,然后进行过滤,第二条SQL会遍历两张表的每一条记录

第二高的薪水

🔒题目

题目来源:176.第二高的薪水

image-20231014180648548

🔑题解

  • 考察知识点

分析:直接可以使用窗口函数,一下就成功解决了

方式一:使用dense_rank

dese_rank按照指定分组进行排序,不会跳过重复的序号(1,1,2)

select salary SecondHighestSalary
from(
    select salary, dense_rank() over(order by salary desc) ranking
    from Employee
) t
where ranking = 2;

发现无法处理数据不足两条的情况,数组不足两条预期结果是null,但是实际查询得到的结果是什么都没有

select if(max(ranking) < 2, null, salary) SecondHighestSalary
from(
    select salary, dense_rank() over(order by salary desc) ranking
    from Employee
) t
where ranking = 2;

方式二:使用nth_value

nth_value用于获取期望值的第n个

1)

select *, nth_value(salary, 2) over(order by salary desc) SecondHighestSalary 
from Employee;
| id | salary | SecondHighestSalary |
| -- | ------ | ------------- |
| 3  | 300    | null          |
| 2  | 200    | 200           |
| 1  | 100    | 200           |

2)

select max(SecondHighestSalary) SecondHighestSalary
from (
    select nth_value(salary, 2) over(partition by salary order by salary desc) SecondHighestSalary 
    from Employee
) t;

结果发现对于结果集中只有一种薪资时无法获取正确的结果,比如表中薪资 都是1000时,此时结果居然是1000,预期结果是null

方式三:使用普通函数

窗口函数只能在MySQL8或者更高的版本中使用,所以这里我们还算有必要学习如何使用普通函数来解决这一题


按日期分组销售产品

🔒题目

题目来源:1484.按日期分组销售产品

image-20231015233320137

🔑题解

  • 考察知识点group bycountdistinctorder bygroup_concat
    • group_concat(column order by column seprartop char):将多行记录的某一个字段按指定分隔符合并为单个字符串

分析:这一题的难点在于筛选出 products ,只要这个会了,其他的都很简单

1)

select sell_date, count(distinct product) num_sold
from Activities
group by sell_date
| sell_date  | num_sold |
| ---------- | -------- |
| 2020-05-30 | 3        |
| 2020-06-01 | 2        |
| 2020-06-02 | 1        |

2)

select sell_date,
       count(distinct product) num_sold,
       group_concat(distinct product order by product separator ',') products
from Activities
group by sell_date
order by sell_date asc

列出指定时间段内所有的下单产品

🔒题目

题目来源:1327.列出指定时间段内所有的下单产品

image-20231015234451276

🔑题解

  • 考察知识点group byhaving连接
select p.product_name, sum(o.unit) unit
from Products p join Orders o on p.product_id = o.product_id
where year(o.order_date) = 2020 and month(o.order_date) = 2
group by p.product_id
having sum(o.unit) >= 100

这里还提供一种方法:

select p.product_name, sum(o.unit) unit
from Products p join Orders o on p.product_id = o.product_id
where o.order_date like '2020-02%'
group by p.product_id
having sum(o.unit) >= 100

查找拥有有效邮箱的用户

🔒题目

题目来源:1517.查找拥有有效邮箱的用户

image-20231015234552215

🔑题解

  • 考察知识点正则表达式

遇到这种字符串匹配,很容易想到使用正则表达式

select user_id, name, mail
from Users
where mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';

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

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

相关文章

apache shiro安全框架反序列化漏洞

用linux搭建一个环境 配置下源vi /etc/apt/sources.list 源如果是kali官方的有时候会下载不了&#xff0c;改成中科大的源 更新下源apt-get update 安装docker-compose 重启kali 启动docker容器 apt-get install docker apt-get install docker-compose reboot service do…

Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)

查询Sql Server Database中的唯一约束 with UniqueBasic as (SELECTtab.name AS TableName, -- 表名称idx.name AS UniqueName, -- 唯一约束的名称col.name AS UniqueFieldName -- 唯一约束的表字段FROMsys.indexes idxJOIN sys.index_columns idxColON (idx.object_id idxCo…

windows环境下搭建redis5.x集群

下载windows版本redis5.x redis.windows.conf内容修改如下&#xff1a; # 端口 &#xff08;注意&#xff1a;改为每个文件夹对应的端口&#xff0c;分别为6379、6380、6381、6382、6383、6384&#xff09; port 6379 # 允许创建集群 appendonly yes cluster-enabled…

【UE5 Cesium】18-Cesium for Unreal 建立飞行跟踪器(3)

本篇博客在上一篇【UE5 Cesium】17-Cesium for Unreal 建立飞行跟踪器&#xff08;2&#xff09;基础上&#xff0c;实现变速飞行的效果。 步骤 1. 打开“BP_Aircraft” 可以看到飞机的运动主要是通过“设置Actor变换”实现的&#xff1a; 最根源是由于“插值”节点中“Alpha…

day01——禁用按钮和输入框等组件

1.代码展示 <button :disabled"true" click"printId">Print ID {{ resultId }}</button> 2.非禁用情况 <button :disabled"false" click"printId">Print ID {{ resultId }}</button> 3.禁用情况 <butt…

notepad++ 批量替换删除指定字符之后 或者 之前的字符,Notepad+批量替换使用大全

notepad 批量替换删除指定字符之后 或者 之前的字符&#xff0c;Notepad批量替换使用大全 资源宝分享&#xff1a;www.httple.net 注意: 不支持多行表达式 (involving \n, \r, etc). 1 基本表达式 符号解释.匹配任意字符&#xff0c;除了新一行(\n)。也就是说 “.”可以匹配 \…

内容分发网络CDN分布式部署真的可以加速吗?原理是什么?

Cdn快不快&#xff1f;她为什么会快&#xff1f;同样的带宽为什么她会快&#xff1f;原理究竟是什么&#xff0c;同学们本着普及知识的想法&#xff0c;我了解的不是很深入&#xff0c;适合小白来看我的帖子&#xff0c;如果您是大佬还请您指正错误的地方&#xff0c;先谢谢大佬…

本机配置SSH连接代码仓库

一、创建SSH 1. 查看是否之前有过ssh&#xff0c;在终端输入。 cd ~/.ssh 如果显示No such file or directory &#xff0c;表示之前没有创建过ssh&#xff0c;直接进入下一步&#xff1b;如果可以直接进入需要先清理rss&#xff0c;终端执行命令&#xff1a; mkdir key_b…

docker拉取镜像错误missing signature key

参考地址&#xff1a;docker拉取镜像错误 missing signature key-CSDN博客 linux系统&#xff0c;使用docker拉取的时候&#xff0c;报错如下 missing signature key 就一阵莫名其妙&#xff0c;之前还好好的&#xff0c;突然就不行了 按照网上说的方法&#xff0c;查看doc…

华为数通方向HCIP-DataCom H12-831题库(单选题:261-280)

第261题 某网络通过部署1S-IS实现全网与通,若在一台IS-IS路由器的某接口下配置命令isis timer holding multiplier 5 level-2,则以下关于该场景的描述,正确的是哪一项? A、该接口Level-2邻居保持时间为5秒 B、该接口Level-1邻居保持时间为30秒 C、该接口为点对点链路接口 …

MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6:InnoDB Tablespaces之系统表空间(System Tablespace)

文章目录 MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6&#xff1a;InnoDB Tablespaces之系统表空间&#xff08;System Tablespace&#xff09;系统表空间&#xff08;System Tablespace&#xff09;主要系统变量innodb_data_file_path关于autoextend和max属性系统表空间文件默…

猫头虎博客带您使用Markdown编辑器

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

山西电力市场日前价格预测【2023-10-17】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-17&#xff09;山西电力市场全天平均日前电价为337.57元/MWh。其中&#xff0c;最高日前电价为437.22元/MWh&#xff0c;预计出现在18: 30。最低日前电价为281.67元/MWh&#xff0c;预计…

微服务docker部署实战

docker基础和进阶(*已掌握的可以跳过 *) 基础 docker基础 进阶 docker进阶 准备工作 提前准备好mysql和redis的配置&#xff0c;如下 在/zzq/mysql/conf目录下配置mysql配置文件my.cnf [client] #设置客户端字符集 default_character_setutf8 [mysqld] #开启定时任务 event_s…

Android组件通信——广播机制:BroadcastReceiver(二十九)

1. BroadcastReceiver 1.1 知识点 &#xff08;1&#xff09;掌握广播接收器的主要作用及基本实现&#xff1b; &#xff08;2&#xff09;可以使用广播启动Service&#xff1b; &#xff08;3&#xff09;理解闹钟服务的使用&#xff1b; 1.2 具体内容 广播这个名词大家…

BAT026:删除当前目录指定文件夹以外的文件夹

引言&#xff1a;编写批处理程序&#xff0c;实现删除当前目录指定文件夹以外的文件夹。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击【编辑】…

vueday01——使用属性绑定+ref属性定位获取id

1.属性绑定&#xff08;Attribute 绑定&#xff09; 第一种写法 <div v-bind:id"refValue"> content </div> 第二种写法&#xff08;省略掉v-bind&#xff09; <div :id"refValue"> content </div> 2.代码展示 <template…

【论文阅读】 Cola-Dif; An explainable task-specific synthesis network

文章目录 CoLa-Diff: Conditional Latent Diffusion Model for Multi-modal MRI SynthesisAn Explainable Deep Framework: Towards Task-Specific Fusion for Multi-to-One MRI Synthesis CoLa-Diff: Conditional Latent Diffusion Model for Multi-modal MRI Synthesis 论文…

谈谈 RDB

谈谈 RDB RDB&#xff1a;相当于对内存中的数据&#xff0c;拍一张数据快照。RDB文件存储的是二进制数据。 这里提一点&#xff0c;Redis 的快照是全量快照&#xff0c;也就是说每次执行快照&#xff0c;都是把内存中的「所有数据」都记录到磁盘中。 所以可以认为&#xff0c;执…

在 Windows Server RDS 服务器 上重置 120 天宽限期

如果您出于测试目的安装了 RDS Server 2016/2019/2022&#xff0c;并且 RDS 许可宽限期已过期&#xff0c;请继续阅读下面的内容以了解如何重置 120 天宽限期。您可能知道&#xff0c;在安装 RDS Server 2016 时&#xff0c;您有 120 天的时间来安装 RD 客户端访问许可证 &…