【力扣 | SQL题 | 每日5题】力扣2362, 2356, 2394, 2480, 2388
1. 力扣2362:生成发票
1.1 题目:
表: Products
+-------------+------+ | Column Name | Type | +-------------+------+ | product_id | int | | price | int | +-------------+------+ product_id 包含唯一值。 该表中的每一行显示了一个产品的 ID 和一个单位的价格。
表: Purchases
+-------------+------+ | Column Name | Type | +-------------+------+ | invoice_id | int | | product_id | int | | quantity | int | +-------------+------+ (invoice_id, product_id) 是该表的主键(具有唯一值的列的组合) 该表中的每一行都显示了从发票中的一种产品订购的数量。
编写解决方案,展示价格最高的发票的详细信息。如果两个或多个发票具有相同的价格,则返回 invoice_id
最小的发票的详细信息。
以 任意顺序 返回结果表。
结果格式示例如下。
示例 1:
输入: Products 表: +------------+-------+ | product_id | price | +------------+-------+ | 1 | 100 | | 2 | 200 | +------------+-------+ Purchases 表: +------------+------------+----------+ | invoice_id | product_id | quantity | +------------+------------+----------+ | 1 | 1 | 2 | | 3 | 2 | 1 | | 2 | 2 | 3 | | 2 | 1 | 4 | | 4 | 1 | 10 | +------------+------------+----------+ 输出: +------------+----------+-------+ | product_id | quantity | price | +------------+----------+-------+ | 2 | 3 | 600 | | 1 | 4 | 400 | +------------+----------+-------+ 解释: 发票 1: price = (2 * 100) = $200 发票 2: price = (4 * 100) + (3 * 200) = $1000 发票 3: price = (1 * 200) = $200 发票 4: price = (10 * 100) = $1000最高价格是 1000 美元,最高价格的发票是 2 和 4。我们返回 ID 最小的发票 2 的详细信息。
1.2 思路:
价格最高=>排名第一=>窗口函数=>rank=>ranks=1
1.3 题解:
-- 以invoice_id分组,查询发票的总价格
with tep1 as (select invoice_id , sum(quantity*price) pricefrom Products t1 join Purchases t2 on t1.product_id = t2.product_id group by invoice_id
), tep2 as (-- 依据价格给每个发票一个排名select invoice_id, price, rank() over (order by price desc, invoice_id) ranksfrom tep1
), tep3 as (-- 然后在Purchases表中找到最高价格发票的记录select product_id , quantity from Purchases where invoice_id = (select invoice_id from tep2 where ranks = 1)
)
-- 内连接收尾
select t1.product_id, quantity , quantity*price price
from tep3 t1
join Products t2
on t1.product_id = t2.product_id
2. 力扣2356:每位教师所教授的科目种类的数量
2.1 题目:
表: Teacher
+-------------+------+ | Column Name | Type | +-------------+------+ | teacher_id | int | | subject_id | int | | dept_id | int | +-------------+------+ 在 SQL 中,(subject_id, dept_id) 是该表的主键。 该表中的每一行都表示带有 teacher_id 的教师在系 dept_id 中教授科目 subject_id。
查询每位老师在大学里教授的科目种类的数量。
以 任意顺序 返回结果表。
查询结果格式示例如下。
示例 1:
输入: Teacher 表: +------------+------------+---------+ | teacher_id | subject_id | dept_id | +------------+------------+---------+ | 1 | 2 | 3 | | 1 | 2 | 4 | | 1 | 3 | 3 | | 2 | 1 | 1 | | 2 | 2 | 1 | | 2 | 3 | 1 | | 2 | 4 | 1 | +------------+------------+---------+ 输出: +------------+-----+ | teacher_id | cnt | +------------+-----+ | 1 | 2 | | 2 | 4 | +------------+-----+ 解释: 教师 1:- 他在 3、4 系教科目 2。- 他在 3 系教科目 3。 教师 2:- 他在 1 系教科目 1。- 他在 1 系教科目 2。- 他在 1 系教科目 3。- 他在 1 系教科目 4。
2.2 思路:
简单题。
2.3 题解:
-- 先去重后查询
with tep as (select distinct teacher_id , subject_id from Teacher
)select teacher_id, count(*) cnt
from tep
group by teacher_id
3. 力扣2394:开除员工
3.1 题目:
表: Employees
+--------------+------+ | Column Name | Type | +--------------+------+ | employee_id | int | | needed_hours | int | +--------------+------+ employee_id 是该表具有的唯一值的列。 每一行都包含员工的 id 和他们获得工资所需的最低工作时数。
表: Logs
+-------------+----------+ | Column Name | Type | +-------------+----------+ | employee_id | int | | in_time | datetime | | out_time | datetime | +-------------+----------+ (employee_id, in_time, out_time) 是该表的主键(具有唯一值的列的组合)。 该表的每一行都显示了员工的时间戳。in_time 是员工开始工作的时间,out_time 是员工结束工作的时间。 所有时间都在 2022 年 10 月。out_time 可以是 in_time 之后的一天,这意味着该员工在午夜之后工作。
在公司里,每个员工每个月必须工作一定的小时数。员工在工作段中工作。员工工作的小时数可以通过员工在所有工作段中工作的分钟数的总和来计算。每个工作段的分钟数是向上取整的。
- 例如,如果员工在一个时间段中工作了
51
分2
秒,我们就认为它是52
分钟。
编写解决方案来报告将被开除的员工的 id。换句话说,报告没有工作所需时间的员工的 id。
以 任意顺序 返回结果表。
结果格式如下所示。
示例 1:
输入: Employees 表: +-------------+--------------+ | employee_id | needed_hours | +-------------+--------------+ | 1 | 20 | | 2 | 12 | | 3 | 2 | +-------------+--------------+ Logs 表: +-------------+---------------------+---------------------+ | employee_id | in_time | out_time | +-------------+---------------------+---------------------+ | 1 | 2022-10-01 09:00:00 | 2022-10-01 17:00:00 | | 1 | 2022-10-06 09:05:04 | 2022-10-06 17:09:03 | | 1 | 2022-10-12 23:00:00 | 2022-10-13 03:00:01 | | 2 | 2022-10-29 12:00:00 | 2022-10-29 23:58:58 | +-------------+---------------------+---------------------+ 输出: +-------------+ | employee_id | +-------------+ | 2 | | 3 | +-------------+ 解释: 员工 1:- 参加了三个工作段:- 在 2022-10-01, 他工作了 8 个小时。- 在 2022-10-06, 他工作了 8 小时 4 分钟。- 在 2022-10-12, 他工作了 4 小时 1 分钟。请注意,他一直工作到午夜。- 员工 1 在各个时段总共工作了 20 小时5分钟,不被开除。 员工 2:- 参加了一个工作段:- 在 2022-10-29, 他工作了 11 小时 59 分钟。- 员工 2 没有工作足够的时长,将被开除。 员工 3:- 没有任何工作段。- 员工 3 没有工作足够的时长,将被开除。
3.2 思路:
使用到了timestampdiff函数和ceil函数。
3.3 题解:
-- 使用了timestampdiff函数,第一个参数限定返回值是两个时间段之间的秒数
-- /60再使用ceil天花板函数,=>每个工作段的分钟数是向上取整的
-- 然后分组求每个时间段的和with tep as (select employee_id , sum(ceil(timestampdiff(second, in_time, out_time) / 60) / 60) sum_minfrom Logsgroup by employee_id
)
-- 这里就是简单的判断比较
select t1.employee_id
from Employees t1
left join tep t2
on t1.employee_id = t2.employee_id
where sum_min is null or
sum_min < needed_hours
4. 力扣2480:形成化学键
4.1 题目:
表: Elements
+-------------+---------+ | Column Name | Type | +-------------+---------+ | symbol | varchar | | type | enum | | electrons | int | +-------------+---------+ symbol 是该表的主键(具有唯一值的列)。 该表的每一行包含一个元素的信息。 type 是 ENUM 类型,它的值是 ('Metal', 'Nonmetal', 'Noble') 之一- 如果 type 是 Noble, electrons 是 0。- 如果 type 是 Metal, electrons 是这种元素的一个原子所能给出的电子数。- 如果 type 是 Nonmetal, electrons 这种元素的一个原子所需要的电子数。
如果一个元素是 'Metal'
,另外一个元素是 'Nonmetal'
,那么它们可以形成键。
编写一个解决方案找出所有可以形成键的元素对。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
输入: Elements 表: +--------+----------+-----------+ | symbol | type | electrons | +--------+----------+-----------+ | He | Noble | 0 | | Na | Metal | 1 | | Ca | Metal | 2 | | La | Metal | 3 | | Cl | Nonmetal | 1 | | O | Nonmetal | 2 | | N | Nonmetal | 3 | +--------+----------+-----------+ 输出: +-------+----------+ | metal | nonmetal | +-------+----------+ | La | Cl | | Ca | Cl | | Na | Cl | | La | O | | Ca | O | | Na | O | | La | N | | Ca | N | | Na | N | +-------+----------+ 解释: Metal 元素包括 La, Ca, and Na. Nonmetal 元素包括 Cl, O, and N. 每个 Metal 元素与输出表中的 Nonmeal 元素配对。
4.2 思路:
其实本质就是笛卡尔积。
看输出表即可。
4.3 题解:
with tep1 as (select symbol metal from Elements where type = 'Metal'
), tep2 as (select symbol nonmetalfrom Elements where type = 'Nonmetal'
)
select metal, nonmetal
from tep1, tep2
5. 力扣2388:将表中的空值更改为前一个值
5.1 题目:
表: CoffeeShop
+-------------+---------+ | Column Name | Type | +-------------+---------+ | id | int | | drink | varchar | +-------------+---------+ id 是该表的主键(具有唯一值的列)。 该表中的每一行都显示了订单 id 和所点饮料的名称。一些饮料行为 null。
编写一个解决方案将 drink 的 null
值替换为前面最近一行不为 null
的 drink。保证表第一行的 drink 不为 null
。
返回 与输入顺序相同的 结果表。
查询结果格式示例如下。
示例 1:
输入: CoffeeShop 表: +----+-------------------+ | id | drink | +----+-------------------+ | 9 | Rum and Coke | | 6 | null | | 7 | null | | 3 | St Germain Spritz | | 1 | Orange Margarita | | 2 | null | +----+-------------------+ 输出: +----+-------------------+ | id | drink | +----+-------------------+ | 9 | Rum and Coke | | 6 | Rum and Coke | | 7 | Rum and Coke | | 3 | St Germain Spritz | | 1 | Orange Margarita | | 2 | Orange Margarita | +----+-------------------+ 解释: 对于 ID 6,之前不为空的值来自 ID 9。我们将 null 替换为 "Rum and Coke"。 对于 ID 7,之前不为空的值来自 ID 9。我们将 null 替换为 "Rum and Coke"。 对于 ID 2,之前不为空的值来自 ID 1。我们将 null 替换为 "Orange Margarita"。 请注意,输出中的行与输入中的行相同。
5.2 思路:
先给每个记录一个排名,然后对于每条记录来说,如果该记录的drink值为null(不为null的情况没啥讨论的),就自连接查询,where限制排名要低于该记录,并且drink不为null,得到最高的排名。从而得到最高排名的记录。
5.3 题解:
-- 先给原表的每行记录一个排名
with tep as (select id , drink, row_number() over () ranksfrom CoffeeShop
)
-- 然后case when决定drink值
-- 如果drink为null,则需要根据排名找到对应的记录。
-- 首先它的排名应该低于t1表的id,并且drink不为null
-- 然后最大排名的人的drink就是这个没有drink值的人的drink
select id,
case when drink is not null then drink
else (select drink from tep t2 whereranks = (select max(ranks) from tep where ranks < t1.ranks anddrink is not null)
)
end drink
from tep t1
相关文章:
【力扣 | SQL题 | 每日5题】力扣2362, 2356, 2394, 2480, 2388
1. 力扣2362:生成发票 1.1 题目: 表: Products ------------------- | Column Name | Type | ------------------- | product_id | int | | price | int | ------------------- product_id 包含唯一值。 该表中的每一行显示了一个产品的 ID …...
直播间“饕餮盛宴”的背后,是“他经济”正在冒头
最近,一个有意思的现象逐渐露出了苗头。 今年“双11”第一轮尾款开启支付的当晚,罗永浩的直播间上演了一出别样的“饕餮盛宴”。直播开场后,iphone16系列、可口可乐(含糖、无糖300ml)10秒售罄,索尼PS5、沃…...
盘点5款常用的环境部署工具
在现代软件开发中,环境部署工具扮演着重要角色,特别是在 PHP 开发和微服务架构中。本文将深入探讨几种主流的环境部署工具,包括 XAMPP、Servbay、MAMP、Laravel Herd 和 Docker,详细分析它们的特点、优缺点、适用场景及最佳实践&a…...
条码检测系统——基于MATLAB的一维条码识别
条码检测系统——基于MATLAB的一维条码识别 摘 要:条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由…...
【Word原件测试资料合集】软件系统功能测试方案,软件测试方案(整体方案),软件测试文档-测试计划模版(功能与性能),软件测试流程
一、 前言 (一) 背景 (二) 目的 (三) 测试目标 (四) 适用范围与读者对象 (五) 术语与缩写 二、 软件测试实施流程 (一) 测试工作总体流…...
1024 程序员节 快乐
大家好,今天是2024-10-24 程序员节~~~~~~~~~祝你节日快乐,程序员!哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦 喂~俺个炊饼~ 马飞~ 好了,该说…...
Java枚举类
1.枚举 1.1概述【理解】 为了间接的表示一些固定的值,Java就给我们提供了枚举 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内 1.2定义格式【应用】 格式 public enum s { 枚举项1,枚举项2,枚举项3; } 注意: 定义枚举类要用关键字enum 示例代…...
kubenetes/kubesphere搭建报错
一、prometheus问题 1.kubesphere 安装 prometheus-k8s 报以下错误: MountVolume.SetUp failed for volume "secret-kube-etcd-client-certs" : secret "kube-etcd-client-certs" not found 原因是:kube-etcd-client-certs 这个证…...
分享几个办公类常用的AI工具
办公类 WPS AI讯飞智文iSlideProcessOn亿图脑图ChatPPT WPS AI 金山办公推出的协同办公 AI 应用,具有文本生成、多轮对话、润色改写等多种功能,可以辅助用户进行文档编辑、表格处理、演示文稿制作等办公操作。 https://ai.wps.cn/ 讯飞智文 科大讯飞推…...
Vue入门示例
今天滴学习目标!!! 示例简介HTML内容主体区域输入框列表区域统计和清空 JS引入Vue.js库定义Vue实例el选项data选项methods选项 示例简介 HTML内容 本次实例讲解的是v-for、v-on、v-model来写这小小的实例,下面是实例的效果图&am…...
鸿蒙开发:实现全局异常捕获和异常查看
前言 开发中的异常信息,我们很容易排查,直接可以在控制台中就可以查看,但是,提交给测试同学或者上线后的异常信息,我们如何获取呢?这里我们很容易想起,三方sdk,比如常见的腾讯Bugly…...
Git和GitHub Desktop(Git客户端工具)下载安装教程
不说废话,直接开始。下载网址:https://git-scm.com/ 一.GIT下载 1.点击downloads 2.自己选择自己需要配置的版本 我是windows,所以选择的windows版本的安装 3.根据自己电脑的系统下载软件 我的是64位,选择64位安装 ps :下载很慢…...
Linux经常使用命令汇总和总结
Linux经常使用命令汇总和总结 文章目录 Linux经常使用命令汇总和总结一、基本命令二、目录操作命令三、文件操作命令四、压缩文件操作五、查找命令六、su、sudo七、系统服务八、网络管理九、定时任务指令crontab 配置十、其他命令 一、基本命令 1.1 关机和重启 关机 shutdown …...
three.js 灯光
环境光探针(AmbientLightProbe) 光照探针是一种在3D场景中添加光源的另一种方法。 AmbientLightProbe 是场景中单个环境光的光照估算数据。 有关光照探针的更多信息,请转到 LightProbe 。 构造函数 AmbientLightProbe( color : Color, int…...
ELK日志收集
目前,各个微服务系统的日志都保存在各自指定的目录中,如果这些微服务部署在不同的服务器上,那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题,我们可以借助ELK来收集各个微服务系统的日志并集中展…...
常见docker命令
1、查询已安装docker中某个image依赖包 docker run -it --rm --name my-python-container 【python37:v001】 /bin/bash 【】改成自己环境名字 docker run -it --name lane python37_test:v006 /bin/bash lane是容器名字,python37_test:v006 是镜像名 开启容器 do…...
测试新人刚入行,该如何规划以后的发展路径?
作为一个刚入行的测试新人,应该如何规划自己的职业发展路径?如何规划自己的技术路线?软件测试的段位都有哪些?他们之间的薪资差异如何? 听说这些问题,是目前想要入行软件测试的同学们最关心的。那么我们今…...
Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation
摘要:低亮度场景检测是一个小众且重要的方向,首先在于数据集和过往的研究都集中在光照充足的环境下,其次如果使用传统的训练方法的话由于训练难度大,模型效果也不会很好,有幸的是,现在关于低亮度的研究已经…...
Chromium html<lable>c++接口定义
HTML <label> 元素(标签)表示用户界面中某个元素的说明。 1、<label> 在html_tag_names.json5中接口定义: (third_party\blink\renderer\core\html\html_tag_names.json5) {name: "label",inte…...
QT中中文显示乱码问题
在VS2013中用QT开发GUI应用程序,Qt中显示中文乱码 一: //解决QT中中文显示乱码问题 #pragma execution_character_set("utf-8") 二:在main函数中添加以下代码: #include <QTextCodec>void main() {QTextCod…...
[面试常见]Javascript基础知识
#1024程序员节|征文# Object.assign 和对象扩展运算符有什么区别?是深拷贝还是浅拷贝? 都进行浅拷贝,只赋值对象的第一层属性,而不会递归复制整个对象结构 **const mergedObj Object.assign({},obj1,obj2) JavaScript 中 Map 和 Object 的区别是什么?…...
使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段
ExcelIgnoreUnannotated 注解用于在使用 Apache POI 或其他 Excel 处理库时,指示在导出 Excel 时忽略没有被标注的字段。这意味着只有被特定注解(如 ExcelProperty)标注的字段会被处理和导出。 作用 简化导出过程:只导出需要的字…...
线程的同步
目录 引入 认识条件变量 快速认识接口编辑 认识条件变量编辑 测试代码编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步:在保证数据安全的前提下,让线程…...
【启明智显分享】ZX7981PG/ZX7981PM融入官方OpenWrt,启明智显SDK/官方OpenWrt任由选择!
好消息!好消息!启明智显ZX7981PG和ZX7981PM正式融入官方 OpenWrt 的大家庭啦!现在开发者不仅可以基于启明智显的SDK进行二次开发,还可以直接应用官方OpenWrt以及我们的开源资料进行开发! 借助OpenWrt的强大生态&…...
如何用java发送包含表格形式的邮件
问题: 如何用java发送包含表格形式的邮件? 方法: 发用freemaker工具来替换html的表格变量,从而动态生成了html。然后再发送这个html格式(不能用纯文本)文本即可。 优化流程: 1、准备模板&#x…...
讲个故事:关于一次接口性能优化的心里路程
这是一个程序猿写的第一个故事,请各位懂行的客官静下心来,慢慢品读。就知道我为什么要单独写一个文章来记录这次过程了,因为实在是太坎坷了...... 背景介绍 近期项目投产时遇到一个问题,投产后在验证时发现大部分用户系统登…...
Centos7升级到openssh9.9
openssh9.9 是2024.9.20出的最新版ssh。因为客户扫描出一大堆centos7的漏洞,全是这个openssh的,好多补丁,所以索性升级到最新版。 需要自己制作rpm包,这个我是不懂,照这个来: Linux服务器升级openssh9.9最…...
使用 STM32F407 串口实现 485 通信
准备工作 了解485通信基本概念与原理:RS485通信详解_485通讯de接什么口-CSDN博客 安装编译软件:keil uVision 5.6 软件资料:STM32CubeF4 固件包,正点原子RS485通信例程 参考视频:第26讲 基础篇-新建H…...
基于NERF技术重建学习笔记
NeRF(Neural Radiance Fields)是一种用于3D场景重建的神经网络模型,能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数,利用了体积渲染和神经网络的结合,通过学习光线穿过空间时的颜色和密度来重建场…...
webView 支持全屏播放
webView 支持全屏播放 直接上代码 public class CustomFullScreenWebViewClient extends WebChromeClient {WebView webView;Context context;/*** 视频全屏参数*/protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS new FrameLayout.LayoutParams(ViewG…...
无锡 网站开发/金华百度推广公司
8月30-31日20:00-21:30,一场别开生面的技术大会—— “蚂蚁金服&阿里云在线金融技术峰会”将在线举办。本次将聚焦数据库、应用架构、移动开发、机器学习等热门领域,帮助金融业技术开发者深入解析互联网应用的前沿应用与技术实践。 蚂蚁金服&阿里…...
网站建设后台管理流程/百度seo效果怎么样
ApcCache根据应用程序组件提供APC缓存。 要使用此应用程序组件,必须加载APC PHP扩展。或者,可以通过将useApcu设置为true来使用APCu PHP扩展。要为CLI启用APC或APCu,您应该在php.ini中添加“apc.enable_cli 1”。 有关ApcCache支持的常见缓…...
鲜花网站建设目的/seo分析
Python学习笔记7 异常处理 包和模块 包和模块的一般操作导入操作的本质模块检索的路径导入模块的场景第三方包和模块的安装 异常处理 系统内部一开始已经内置了一些特定的错误场景,当我们触发了这个场景时,系统内部就会向外界抛出异常。如果我们没有处…...
专业做网站的公司有/线上卖货平台有哪些
1.找到此电脑,右击点击属性 2.左边侧栏,高级系统设置 3.系统属性中点击高级 4.点击环境变量 5.可以看到 某某某用户变量和系统变量两个方框 其中,系统变量是要你在打开cmd是用管理员身份运行所使用的环境变量 而上一个用户变量则是平时正常打…...
记事本做网站怎么加背景图/网站百度seo关键词优化
今天给大家筛选了8本侧重基础的ABAQUS书籍,大家可根据自己的学习需求阅读练习。ABAQUS6.6基础教程与实例详解作者:刘展出版社:中国水利水电出版社简介:本书全面系统地介绍了ABAQUS6.6的使用。分为两部分,第1部分为ABAQ…...
网站建设部署与发布/广告多的网站
Jacket-U盘自动复制软件源码,采用VC编写实现的U盘监控自动复制程序,运行后按ctrlaltu打开界面,功能有:自动隐藏-全自动智能选择U盘-自动拷贝-进程隐藏-开机后台启动-改进。 源码目录结构图: 部分源码展示(由…...