【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题

文章目录

  • 【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题
    • ⛅前言
    • 超过5名学生的课
      • 🔒题目
      • 🔑题解
    • 求关注者的数量
      • 🔒题目
      • 🔑题解
    • 只出现一次的最大数字
      • 🔒题目
      • 🔑题解
    • 买下所有产品的客户
      • 🔒题目
      • 🔑题解
    • 每位经理的下属员工数量
      • 🔒题目
      • 🔑题解

【LeetCode高频SQL50题-基础版】打卡第5天:第26~30题

⛅前言

  在这个博客专栏中,我将为大家提供关于 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)全球极客挚爱的技术成长平台

超过5名学生的课

🔒题目

题目来源:596.超过5名学生的课

image-20231010085417801

🔑题解

  • 考察知识点group byhavingcount
select class
from Courses
group by class
having count(*) >= 5;

求关注者的数量

🔒题目

题目来源:1729.求关注者的数量

image-20231010085634651

🔑题解

  • 考察知识点countgroup byorder by
select user_id, count(*) followers_count
from Followers
group by user_id
order by user_id asc;

order by 默认排序就是 asc,所以这里的 acs 可以直接省略

只出现一次的最大数字

🔒题目

题目来源:619.只出现一次的最大数字

image-20231010093434229

🔑题解

  • 考察知识点maxgroup byhaving子查询

1)首先审题,我们明确我们需要从只出现一次的数字中,选出一个最大的,所以我们可以先查询出只出现一次的数字

select num, count(*) total
from MyNumbers
group by num
having total = 1;
| num | total |
| --- | ----- |
| 1   | 1     |
| 4   | 1     |
| 5   | 1     |
| 6   | 1     |

2)只要我们查询出了单个出现的数字,剩下的就很简单的,直接使用 max过滤出最大值即可

select max(num) num
from (select num, count(*) totalfrom MyNumbersgroup by numhaving total = 1
) single;

还有一种写法,不使用子查询,使用 排序+分页来实现

温馨提示:更加推荐第一种使用 max+子查询 的方式来获取最大的单个数字,因为 max+子查询 方式更加通用,可读性、性能更高

1)直接编写下面一个SQL即可,但是需要对结果进行处理

select num, count(num) total
from MyNumbers
group by num
having total = 1
order by num desc
limit 1;
| num | total |
| --- | ----- |
| 6   | 1     |

2)但是要使用 if 处理一下这个 total

select if(count(num)=1, num, 0) total
from MyNumbers
group by num
order by total desc;
| total |
| ----- |
| 6     |
| 5     |
| 4     |
| 1     |
| 0     |
| 0     |

3)此时我们把 total 换成 num 即可,再加一个 limit

select if(count(num)=1, num, 0) num
from MyNumbers
group by num
order by num desc
limit 1;
| num |
| --- |
| 0   |

嘿嘿,看到这个结果很让人惊讶,为什么 limit 得到的是0,而不是6???

问题原因:😫这个问题害我想了好久,结果发现是LeetCode的在线SQL编译器问题

image-20231010162739469

解决方法

select if(count(num)=1, num, null) num
from MyNumbers
group by num
order by num desc
limit 1;

买下所有产品的客户

🔒题目

题目来源:1045.买下所有产品的客户

image-20231010093528517

🔑题解

  • 考察知识点

1)审题,我想要计算出购买所有产品的用户,我的想法是先计算出产品的数量,然后判断一下用户的数量是否等于产品的总数,相等则说明这个用户购买了所有的产品

select customer_id
from Customer
group by customer_id
having count(customer_id) = (select count(*) from Product);

2)结果运行报错了,因为我没有认真审题,Customer表中可能存在重复的记录,因为一个用户可能多次购买同一个产品,对上面的代码作出更正,因为我们已经进行了分组,我们 只需要计算出分组后每一个用户的产品数量即可(注意需要去重)

select customer_id
from Customer
group by customer_id
having count(distinct product_key) = (select count(*) from Product);

每位经理的下属员工数量

🔒题目

题目来源:1731.每位经理的下属员工数量

image-20231010093622529

🔑题解

  • 考察知识点自连接avgcountround

1)首先审题,我们可以通过自连接将相关联的两条记录变为一条,这样就好进行后面的逻辑处理了

select *
from Employees e1 join Employees e2 on e1.employee_id = e2.reports_to;
| employee_id | name  | reports_to | age | employee_id | name  | reports_to | age |
| ----------- | ----- | ---------- | --- | ----------- | ----- | ---------- | --- |
| 9           | Hercy | null       | 43  | 6           | Alice | 9          | 41  |
| 9           | Hercy | null       | 43  | 4           | Bob   | 9          | 36  |

2)然后对上表进行操作,即可得到正确的结果了

select e1.employee_id, e1.name, count(e2.reports_to) reports_count, round(avg(e2.age), 0) average_age
from Employees e1 join Employees e2 on e1.employee_id = e2.reports_to
group by e1.employee_id
order by e1.employee_id;

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

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

相关文章

《进化优化》第4章 遗传算法的数学模型

文章目录 4.1 图式理论4.2 马尔可夫链4.3 进化算法的马尔可夫模型的符号4.4 遗传算法的马尔可夫模型4.4.1 选择4.4.2 变异4.4.3 交叉 4.5 遗传算法的动态系统模型4.5.1 选择4.5.2 变异4.5.3 交叉 4.1 图式理论 图式是描述一组个体的位模式,其中用*来表示不在乎的位…

如何在Ubuntu 20.04.6 LTS系统上运行Playwright自动化测试

写在前面 这里以 Ubuntu 20.04.6 LTS为例。示例代码:自动化测试代码。 如果过程中遇到其他非文本中提到的错误,可以使用搜索引擎搜索错误,找出解决方案,再逐步往下进行。 一、 环境准备 1.1 安装python3 1.1.1 使用APT安装Py…

dll文件缺失,ps,pr无法打开,游戏运行不了如何解决

最近重装了系统,然后打开原来的软件发现都会报错,说***.dll文件缺失 于是找了很多解决办法 方案一 说是下载一个dll文件恢复助手,一键恢复 不要信 统统不管用,不是收费高就是没作用 方案二 下载对应dll文件去c盘对应软件位置…

python+opencv+深度学习实现二维码识别 计算机竞赛

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 pythonopencv深度学习实现二维码识别 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 该项目较为新颖&…

Sqlite3 查询 今日、昨日、本周、上周、本月、上月、本季度、上季度、本年

一、使用Between AND select * from 表名 where 字段名 Between ‘2019-1-01 00:00:00’ AND ‘2019-7-12 23:59:59’ 二、使用>,< select * from 表名 where 字段名 > ‘2019-1-01 00:00:00’ and 字段名 < ‘2019-12-12 23:59:59’ 三、升降序 select * from 表…

mathtype嵌入到wps中

首先你需要保证你有一个mathtype&#xff0c;mathtype的安装很简单&#xff0c;请自行查找资料 然后将mathtype嵌入到哪里是一个问题&#xff0c;网上的教程很多&#xff0c;但是一般分为两种&#xff0c;wps和word 那么&#xff0c;我为什么选取wps&#xff1f; 因为word频频碰…

BAT学习——计算当前路径下指定格式文件的MD5值,将文件名与MD5值写入文本

将以下内容粘贴到bat脚本中&#xff0c;双击运行&#xff0c;生成MD5.txt文件&#xff0c;需要其他格式&#xff0c;修改循环中的.rar 多个格式使用or分开 *.rar or *.bat脚本内容 echo off setlocal enabledelayedexpansionrem 设置输出文件名 set "outputFileMD5.txt&…

跨语言深入探讨如何实现方法增强:Java Go的多策略实现

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

虚拟现实VR技术在医疗行业的应用介绍

虚拟现实 (VR) 虽然经常与游戏联系在一起&#xff0c;但不可否认&#xff0c;未来科技少不了虚拟现实&#xff0c;其应用可以彻底改变许多行业。在医疗领域&#xff0c;无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式&#xff0c;比如在手术、疼痛管理…

最新水果FL Studio21.2中文汉化版本覆盖升级

FLStudio中文21最新版本以其使用速度而闻名&#xff0c;是一个高度复杂的音乐制作环境。FL Studio免费&#xff0c;联合国音序器音频和MIDI每个复合编辑都是音乐。现代的DAW是一种非凡的野兽。首先&#xff0c;它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次&…

【计算机网络】——前言计算机网络发展的历程概述

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…

【经典排序算法 time: 2023-10-12】冒泡排序(层层优化改进)

原理 每次循环找出一个最大的元素&#xff08;动态演示&#xff09;第一版冒泡 public class Maopao1 {public static void main(String[] args) {long start System.currentTimeMillis();int[] arr2 {11, 23, 69, 99, 1, 3, 45, 67, 5, 234, 678, 999, 7, 123};int[] result…

【2023全网最全教程】web自动化测试入门

一、自动化测试基本介绍 1 自动化测试概述&#xff1a; 什么是自动化测试&#xff1f;一般说来所有能替代人工测试的方式都属于自动化测试&#xff0c;即通过工具和脚本来模拟人执行用例的过程。 2 自动化测试的作用 减少软件测试时间与成本改进软件质量通过扩大测试覆盖率…

hive 之select 中文乱码

此处的中文乱码和mysql的库表 编码 latin utf 无关。 直接上案例。 有时候我们需要自定义一列&#xff0c;有时是汉字有时是字母&#xff0c;结果遇到这种情况了。 说实话看到这真是糟心。这谁受得了。 单独select 没有任何问题。 这是怎么回事呢&#xff1f; 经过一番检查&…

【C++】-c++11的知识点(中)--lambda表达式,可变模板参数以及包装类(bind绑定)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

十六、【橡皮擦工具组】

文章目录 橡皮擦背景橡皮擦1. 一次取样2. 连续取样3. 取样背景色板 魔术橡皮擦 橡皮擦 橡皮擦跟我们平常生活中所用的橡皮擦是一样&#xff0c;它是将图层的内容擦除,只剩下空白部分。另外当我们按住Alt的键去擦除空白部分的时候&#xff0c;也可以将背景的部分显示出来。 另…

架构实战关键知识点

1.维基百科的“系统”定义&#xff1a;https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%B5%B1 2.维基百科的“软件模块”定义&#xff1a;https://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%9 4%E6%A8%A1%E7%B5%84 3.维基百科的“软件组件”定义&#xff1a;https://zh.wikipedia.or…

走进GraalVM

是什么 GraalVM是一个高性能的JDK&#xff0c;旨在加速用Java和其他JVM语言编写的应用程序的执行&#xff0c;同时还为JavaScript&#xff0c;Python&#xff0c;Ruby和许多其他流行语言提供运行特点 GraalVM可以代替JDK、JVM之前的工作。 GraalVM除了支持Java&#xff0c;也支…

深入解析Spring Cloud Gateway的GlobalFilter

文章目录 摘要引言GlobalFilter的作用使用GlobalFilter默认的GlobalFilter自定义GlobalFilter 示例代码配置GlobalFilter配置文件方式代码方式 高级用法&#xff1a;重写GlobalFilter思路代码实现 结论参考文献 摘要 本文将详细介绍Spring Cloud Gateway中的GlobalFilter&…

VR会议:远程带看功能,专为沉浸式云洽谈而生

随着科技的不断发展&#xff0c;VR技术已经成为当今市场上较为热门的新型技术之一了&#xff0c;而VR会议远程带看功能&#xff0c;更是为用户提供更加真实、自然的沉浸式体验。 随着5G技术的发展&#xff0c;传统的图文、视频这种展示形式已经无法满足消费者对信息真实性的需求…