当前位置: 首页 > news >正文

【力扣 | 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&#xff1a;生成发票 1.1 题目&#xff1a; 表: Products ------------------- | Column Name | Type | ------------------- | product_id | int | | price | int | ------------------- product_id 包含唯一值。 该表中的每一行显示了一个产品的 ID …...

直播间“饕餮盛宴”的背后,是“他经济”正在冒头

最近&#xff0c;一个有意思的现象逐渐露出了苗头。 今年“双11”第一轮尾款开启支付的当晚&#xff0c;罗永浩的直播间上演了一出别样的“饕餮盛宴”。直播开场后&#xff0c;iphone16系列、可口可乐&#xff08;含糖、无糖300ml&#xff09;10秒售罄&#xff0c;索尼PS5、沃…...

盘点5款常用的环境部署工具

在现代软件开发中&#xff0c;环境部署工具扮演着重要角色&#xff0c;特别是在 PHP 开发和微服务架构中。本文将深入探讨几种主流的环境部署工具&#xff0c;包括 XAMPP、Servbay、MAMP、Laravel Herd 和 Docker&#xff0c;详细分析它们的特点、优缺点、适用场景及最佳实践&a…...

条码检测系统——基于MATLAB的一维条码识别

条码检测系统——基于MATLAB的一维条码识别 摘 要&#xff1a;条码技术是如今应用最广泛的识别和输入技术之一&#xff0c;由于其包含的信息量大&#xff0c;识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由…...

【Word原件测试资料合集】软件系统功能测试方案,软件测试方案(整体方案),软件测试文档-测试计划模版(功能与性能),软件测试流程

一、 前言 &#xff08;一&#xff09; 背景 &#xff08;二&#xff09; 目的 &#xff08;三&#xff09; 测试目标 &#xff08;四&#xff09; 适用范围与读者对象 &#xff08;五&#xff09; 术语与缩写 二、 软件测试实施流程 &#xff08;一&#xff09; 测试工作总体流…...

1024 程序员节 快乐

大家好&#xff0c;今天是2024-10-24 程序员节~~~~~~~~~祝你节日快乐&#xff0c;程序员&#xff01;哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦 喂~俺个炊饼~ 马飞~ 好了&#xff0c;该说…...

Java枚举类

1.枚举 1.1概述【理解】 为了间接的表示一些固定的值&#xff0c;Java就给我们提供了枚举 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内 1.2定义格式【应用】 格式 public enum s { 枚举项1,枚举项2,枚举项3; } 注意: 定义枚举类要用关键字enum 示例代…...

kubenetes/kubesphere搭建报错

一、prometheus问题 1.kubesphere 安装 prometheus-k8s 报以下错误&#xff1a; MountVolume.SetUp failed for volume "secret-kube-etcd-client-certs" : secret "kube-etcd-client-certs" not found 原因是&#xff1a;kube-etcd-client-certs 这个证…...

分享几个办公类常用的AI工具

办公类 WPS AI讯飞智文iSlideProcessOn亿图脑图ChatPPT WPS AI 金山办公推出的协同办公 AI 应用&#xff0c;具有文本生成、多轮对话、润色改写等多种功能&#xff0c;可以辅助用户进行文档编辑、表格处理、演示文稿制作等办公操作。 https://ai.wps.cn/ 讯飞智文 科大讯飞推…...

Vue入门示例

今天滴学习目标&#xff01;&#xff01;&#xff01; 示例简介HTML内容主体区域输入框列表区域统计和清空 JS引入Vue.js库定义Vue实例el选项data选项methods选项 示例简介 HTML内容 本次实例讲解的是v-for、v-on、v-model来写这小小的实例&#xff0c;下面是实例的效果图&am…...

鸿蒙开发:实现全局异常捕获和异常查看

前言 开发中的异常信息&#xff0c;我们很容易排查&#xff0c;直接可以在控制台中就可以查看&#xff0c;但是&#xff0c;提交给测试同学或者上线后的异常信息&#xff0c;我们如何获取呢&#xff1f;这里我们很容易想起&#xff0c;三方sdk&#xff0c;比如常见的腾讯Bugly…...

Git和GitHub Desktop(Git客户端工具)下载安装教程

不说废话&#xff0c;直接开始。下载网址&#xff1a;https://git-scm.com/ 一.GIT下载 1.点击downloads 2.自己选择自己需要配置的版本 我是windows&#xff0c;所以选择的windows版本的安装 3.根据自己电脑的系统下载软件 我的是64位&#xff0c;选择64位安装 ps :下载很慢…...

Linux经常使用命令汇总和总结

Linux经常使用命令汇总和总结 文章目录 Linux经常使用命令汇总和总结一、基本命令二、目录操作命令三、文件操作命令四、压缩文件操作五、查找命令六、su、sudo七、系统服务八、网络管理九、定时任务指令crontab 配置十、其他命令 一、基本命令 1.1 关机和重启 关机 shutdown …...

three.js 灯光

环境光探针&#xff08;AmbientLightProbe&#xff09; 光照探针是一种在3D场景中添加光源的另一种方法。 AmbientLightProbe 是场景中单个环境光的光照估算数据。 有关光照探针的更多信息&#xff0c;请转到 LightProbe 。 构造函数 AmbientLightProbe( color : Color, int…...

ELK日志收集

目前&#xff0c;各个微服务系统的日志都保存在各自指定的目录中&#xff0c;如果这些微服务部署在不同的服务器上&#xff0c;那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题&#xff0c;我们可以借助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是容器名字&#xff0c;python37_test:v006 是镜像名 开启容器 do…...

测试新人刚入行,该如何规划以后的发展路径?

作为一个刚入行的测试新人&#xff0c;应该如何规划自己的职业发展路径&#xff1f;如何规划自己的技术路线&#xff1f;软件测试的段位都有哪些&#xff1f;他们之间的薪资差异如何&#xff1f; 听说这些问题&#xff0c;是目前想要入行软件测试的同学们最关心的。那么我们今…...

Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation

摘要&#xff1a;低亮度场景检测是一个小众且重要的方向&#xff0c;首先在于数据集和过往的研究都集中在光照充足的环境下&#xff0c;其次如果使用传统的训练方法的话由于训练难度大&#xff0c;模型效果也不会很好&#xff0c;有幸的是&#xff0c;现在关于低亮度的研究已经…...

Chromium html<lable>c++接口定义

HTML <label> 元素&#xff08;标签&#xff09;表示用户界面中某个元素的说明。 1、<label> 在html_tag_names.json5中接口定义&#xff1a; &#xff08;third_party\blink\renderer\core\html\html_tag_names.json5&#xff09; {name: "label",inte…...

QT中中文显示乱码问题

在VS2013中用QT开发GUI应用程序&#xff0c;Qt中显示中文乱码 一&#xff1a; //解决QT中中文显示乱码问题 #pragma execution_character_set("utf-8") 二&#xff1a;在main函数中添加以下代码&#xff1a; #include <QTextCodec>void main() {QTextCod…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...