【LeetCode高频SQL50题-基础版】打卡第3天:第16~20题
文章目录
- 【LeetCode高频SQL50题-基础版】打卡第3天:第16~20题
- ⛅前言
- 平均售价
- 🔒题目
- 🔑题解
- 项目员工I
- 🔒题目
- 🔑题解
- 各赛事的用户注册率
- 🔒题目
- 🔑题解
- 查询结果的质量和占比
- 🔒题目
- 🔑题解
- 每月交易I
- 🔒题目
- 🔑题解
【LeetCode高频SQL50题-基础版】打卡第3天:第16~20题
⛅前言
在这个博客专栏中,我将为大家提供关于 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)全球极客挚爱的技术成长平台
平均售价
🔒题目
题目来源:1251.平均售价

🔑题解
考查知识点:sum()、ifnull()
sum(column):对表中某一列进行求和round(number, n):对number保留n位小数,采用四舍五入的方式ifnull(expression_1, expression_2):如果表达式1为null,则结果为expression_2,如果表达式不为null,则结果为expression_1- 对 null 值的处理
这里我选择采用一步一步调整SQL的方式来解题,因为这种方式能够让我们更加清晰的了解SQL的执行过程
1)先做一个左连接
select *
from Prices p left join UnitsSold u on p.product_id = u.product_id;
| product_id | start_date | end_date | price | product_id | purchase_date | units |
| ---------- | ---------- | ---------- | ----- | ---------- | ------------- | ----- |
| 1 | 2019-02-17 | 2019-02-28 | 5 | 1 | 2019-03-01 | 15 |
| 1 | 2019-02-17 | 2019-02-28 | 5 | 1 | 2019-02-25 | 100 |
| 1 | 2019-03-01 | 2019-03-22 | 20 | 1 | 2019-03-01 | 15 |
| 1 | 2019-03-01 | 2019-03-22 | 20 | 1 | 2019-02-25 | 100 |
| 2 | 2019-02-01 | 2019-02-20 | 15 | 2 | 2019-03-22 | 30 |
| 2 | 2019-02-01 | 2019-02-20 | 15 | 2 | 2019-02-10 | 200 |
| 2 | 2019-02-21 | 2019-03-31 | 30 | 2 | 2019-03-22 | 30 |
| 2 | 2019-02-21 | 2019-03-31 | 30 | 2 | 2019-02-10 | 200 |
2)从上面的执行结果来看,producet_id 发生了重复,我们采用 group by进行去重
select *
from Prices p left join UnitsSold u on p.product_id = u.product_id
group by p.product_id;
| product_id | start_date | end_date | price | product_id | purchase_date | units |
| ---------- | ---------- | ---------- | ----- | ---------- | ------------- | ----- |
| 1 | 2019-02-17 | 2019-02-28 | 5 | 1 | 2019-03-01 | 15 |
| 2 | 2019-02-01 | 2019-02-20 | 15 | 2 | 2019-03-22 | 30 |
3)我们还需要通过按照产品销售日期计算每一个产品的总销售额
select p.product_id, SUM(units * price) as all_price, SUM(units) as all_units
from Prices p left join UnitsSold u on p.product_id = u.product_id
where u.purchase_date between p.start_date and p.end_date
group by p.product_id;
| product_id | all_price | all_units |
| ---------- | --------- | --------- |
| 1 | 800 | 115 |
| 2 | 3900 | 230 |
product_id = 1 的计算结果是 800=(100 * 5)+(15 * 20),115=100+15,
4)进行相除,计算平均售价
select p.product_id, round(sum(units * price) / sum(units),2) as average_price
from Prices p left join UnitsSold u on p.product_id = u.product_id
where u.purchase_date between p.start_date and p.end_date
group by p.product_id;
| product_id | average_price |
| ---------- | ------------- |
| 1 | 6.96 |
| 2 | 16.96 |
5)对于销售额为 null 的商品采用上面的SQL会报错,因为null与其它结果参数运算的结果可能为null,而我们需要的结果是0
select p.product_id, round(ifnull(sum(units * price) / sum(units), 0), 2) as average_price
from Prices p left join UnitsSold u on p.product_id = u.product_id
where u.purchase_date between p.start_date and p.end_date or u.product_id is null
group by p.product_id;
注意:
- null与其它数值类型进行运算,结果为null,所以要通过
ifnull()函数计算过滤 - null不参与聚合函数的计算,为了保障
sum()函数的求和数量正确需要添加一个条件 or u.product_id is null ,把 UnitsSold表中 null 的列也统计起来,这样记录总数才是正确的,否则记录总数会比真实值小
项目员工I
🔒题目

🔑题解
- 考察知识点:
左连接、group by、sum、count、round
1)先进行左连接
select *
from Project p left join Employee e on p.employee_id = e.employee_id;
| project_id | employee_id | employee_id | name | experience_years |
| ---------- | ----------- | ----------- | ------ | ---------------- |
| 1 | 1 | 1 | Khaled | 3 |
| 1 | 2 | 2 | Ali | 2 |
| 1 | 3 | 3 | John | 1 |
| 2 | 1 | 1 | Khaled | 3 |
| 2 | 4 | 4 | Doe | 2 |
2)和目标结果表进行对比,发现还需要对 project_id 进行去重
select *
from Project p left join Employee e on p.employee_id = e.employee_id
group by p.project_id;
| project_id | employee_id | employee_id | name | experience_years |
| ---------- | ----------- | ----------- | ------ | ---------------- |
| 1 | 1 | 1 | Khaled | 3 |
| 2 | 1 | 1 | Khaled | 3 |
3)和目标结果表进行对比,发现还需要计算 每一个项目的员工的平均年限,同时需要使用round()函数对平均值进行保留两位小数
一个项目员工的平均年限=项目所有员工的年限/项目员工的数量
select p.project_id, round(sum(e.experience_years)/count(p.project_id), 2) average_years
from Project p left join Employee e on p.employee_id = e.employee_id
group by p.project_id;
+-------------+---------------+
| project_id | average_years |
+-------------+---------------+
| 1 | 2.00 |
| 2 | 2.50 |
+-------------+---------------+
各赛事的用户注册率
🔒题目
题目来源:1633.各赛事的用户注册率

🔑题解
- 考察知识点:
count、round、group by、order by
select contest_id , round(count(user_id) * 100/ (select count(*) from users), 2) percentage
from Register
group by contest_id
order by percentage desc, contest_id
查询结果的质量和占比
🔒题目
题目来源:1211.查询结果的质量和占比

🔑题解
-
考察知识点:
count、round、group by、sum、if、avg -
方式一:
select query_name, round((sum(rating/position)/count(query_name)), 2) quality,round(sum(if(rating < 3, 1, 0)) * 100 / count(*), 2) poor_query_percentage from Queries group by query_name;其中
if(rating < 3, 1, 0)等价于case when rating < 3 then 1 else 0 end -
方式二:
select query_name, round(avg(rating/position), 2) quality,round(avg(rating < 3)*100, 2) poor_query_percentage from Queries group by query_name;其中
avg(rating < 3)这个表达式的含义是,计算评分小于3占总数的百分比
备注:这两个SQL,第二个适用 avg 函数的SQL性能更好,因为第一个 SQL 查询中使用了多个聚合函数和条件语句,如 sum、round、if 等,这可能会导致更多的计算和操作,从而影响查询的性能。而第二个 SQL 查询中只使用了两个简单的聚合函数 avg 和 round,没有使用条件语句,所以计算的复杂度较低,查询性能相对较好。
每月交易I
🔒题目
题目来源:1193.每月交易I

🔑题解
- 考察知识点:
count、sum、data_formate、group by、order by
selectdate_format(trans_date, "%Y-%m") month,country,count(*) trans_count,count(if(state='approved', 1, null)) approved_count,sum(amount) trans_total_amount,sum(if(state = 'approved', amount, 0)) approved_total_amount
from Transactions
group by country, month
order by month;
还可以换一种写法
selectleft(trans_date, 7) month,country,count(*) trans_count,sum(if(state='approved', 1, 0)) approved_count,sum(amount) trans_total_amount,sum(if(state = 'approved', amount, 0)) approved_total_amount
from Transactions
group by country, month
order by month;
相关文章:
【LeetCode高频SQL50题-基础版】打卡第3天:第16~20题
文章目录 【LeetCode高频SQL50题-基础版】打卡第3天:第16~20题⛅前言 平均售价🔒题目🔑题解 项目员工I🔒题目🔑题解 各赛事的用户注册率🔒题目🔑题解 查询结果的质量和占比🔒题目&am…...
系统压力测试:保障系统性能与稳定的重要措施
压力测试简介 在当今数字化时代,各种系统和应用程序扮演着重要角色,从企业的核心业务系统到在线服务平台,都需要具备高性能和稳定性,以满足用户的需求。然而,随着用户数量和业务负载的增加,系统可能会面临…...
常用数据结构和算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、时间复杂度二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 这里面有10个数据结构࿱…...
C++中使用引用避免内存复制
C中使用引用避免内存复制 引用让您能够访问相应变量所在的内存单元,这使得编写函数时引用很有用。典型的函数声明类似于下面这样: ReturnType DoSomething(Type parameter);调用函数 DoSomething() 的代码类似于下面这样: ReturnType Resu…...
计算机网络(第8版)-第4章 网络层
4.1 网络层的几个重要概念 4.1.1 网络层提供的两种服务 如果主机(即端系统)进程之间需要进行可靠的通信,那么就由主机中的运输层负责(包括差错处理、流量控制等)。 4.1.2 网络层的两个层面 4.2 网际协议 IP 图4-4 网…...
chromadb 0.4.0 后的改动
本文基于一篇上次写的博客:[开源项目推荐]privateGPT使用体验和修改 文章目录 一.上次改好的ingest.py用不了了,折腾了一会儿二.发现privateGPT官方更新了总结下变化效果 三.others 一.上次改好的ingest.py用不了了,折腾了一会儿 pydantic和c…...
Windows环境下下载安装Elasticsearch和Kibana
Windows环境下下载安装Elasticsearch和Kibana 首先说明这里选择的版本都是7.17 ,为什么不选择新版本,新版本有很多坑,要去踩,就用7就够了。 Elasticsearch下载 Elasticsearch是一个开源的分布式搜索和分析引擎,最初由…...
机器学习:随机森林
集成学习 集成学习(Ensemble Learning)是一种机器学习方法,通过将多个基本学习算法的预测结果进行组合,以获得更好的预测性能。集成学习的基本思想是通过结合多个弱分类器或回归器的预测结果,来构建一个更强大的集成模…...
ctfshow-web11(session绕过)
php代码审计: function replaceSpecialChar($strParam){$regex "/(select|from|where|join|sleep|and|\s|union|,)/i";return preg_replace($regex,"",$strParam);} 首先定义了一个函数,主要是使用preg_replace函数对我们提交的内…...
状态模式:对象状态的变化
欢迎来到设计模式系列的第十七篇文章。在本文中,我们将深入探讨状态模式,这是一种行为型设计模式,用于管理对象的状态以及状态之间的变化。 什么是状态模式? 状态模式是一种允许对象在内部状态发生变化时改变其行为的设计模式。…...
解耦常用方法
1、类别 DIP依赖倒置、IoC控制反转、DI依赖注入(Dependency Injection) c11 实现依赖注入 控制反转、依赖注入、依赖倒置傻傻分不清楚? 我曾想深入了解的:依赖倒置、控制反转、依赖注入 2、方法 解耦基本方法 step1:…...
根据二叉树创建字符串--力扣
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…...
代码事件派发机制(观察者模式)
事件派发机制主要用来解决: 代码解耦和维护,一般在代码中会要管理一些闭包函数 然后在指定的业务中触发运行闭包函数逻辑用了事件派发机制 就可以先把要处理的事件 挂在在一个事件管理类中 上面挂满要处理的闭包函数然后通过dispatch 出发要执行的任务 也就是闭包1. PHP中实…...
微服务技术栈-Nacos配置管理和Feign远程调用
文章目录 前言一、统一配置管理1.添加配置文件2.微服务拉取配置3.配置共享 三、Feign远程调用总结 前言 在上篇文章中介绍了微服务技术栈中Nacos这个组件的概念,Nacos除了可以做注册中心,同样可以做配置管理来使用。同时我们将学习一种新的远程调用方式…...
操作系统 OS
本文章是学习《操作系统》慕课版 和 王道《2024年 操作系统 考研复习指导》后所做的笔记,其中一些图片来源于学习资料。 目录 概念(定义) 目标 方便性 有效性 可扩充性 开放性 作用 OS 作为用户与计算机硬件系统之间的接口 — 人机交…...
基于ffmpeg给视频添加时间字幕
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕,字幕的内容为视频所播放的时间(故需要安装ffmpeg,具…...
爬虫基础知识点快速入门
以下是一个包含注释的Python示例,演示了基本的网页爬取过程,以及一些常见的爬虫知识点: # 导入必要的库 import requests # 用于发送HTTP请求 from bs4 import BeautifulSoup # 用于解析HTML import csv # 用于数据存储# 1. 指定目标网站…...
解释器模式 行为型模式之五
1.定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器。比如加减乘除在代码里是一种表示,我们需要翻译成可以阅读的数学公式,并且可以供用户输入数字得到输出结果。 2.组成结构 抽象表达式(Abstract Expres…...
2023年中国汽车座舱行业发展现状及趋势分析:高级人机交互(HMI)系统将逐步提升[图]
2022年有22.3%的汽车用户认为座舱内车载娱乐功能成为影响使用体验的关键因素。当前智能电动汽车的用户画像与娱乐、游戏等应用的用户画像相似,均以年轻人作为目标用户。年轻化的用户将娱乐功能的使用习惯延伸至汽车座舱内,对于座舱功能的需求不再局限于导…...
常见的通用型项目管理软件推荐
常用项目管理软件有很多。按适合的行业来分,有针对各种垂直行业定制的,也有全行业通用的。从厂商来看,有国外研发的,也有国内厂商的,体现在软件的设计思路不同,上手的手感也很不一样。从体量来看࿰…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
