【力扣 | 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…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
