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

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述:1767.寻找没有被执行的任务对

表:Tasks

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| task_id        | int     |
| subtasks_count | int     |
+----------------+---------+
task_id 具有唯一值的列。
task_id 表示的为主任务的id,每一个task_id被分为了多个子任务(subtasks),subtasks_count表示为子任务的个数(n),它的值表示了子任务的索引从1到n。
本表保证2 <=subtasks_count<= 20。

表: Executed

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| task_id       | int     |
| subtask_id    | int     |
+---------------+---------+
(task_id, subtask_id) 是该表中具有唯一值的列的组合。
每一行表示标记为task_id的主任务与标记为subtask_id的子任务被成功执行。
本表 保证 ,对于每一个task_id,subtask_id <= subtasks_count。

编写解决方案报告没有被执行的(主任务,子任务)对,即没有被执行的(task_id, subtask_id)。

以 任何顺序 返回即可。

查询结果格式如下。

示例 1:

输入:
Tasks 表:
+---------+----------------+
| task_id | subtasks_count |
+---------+----------------+
| 1       | 3              |
| 2       | 2              |
| 3       | 4              |
+---------+----------------+
Executed 表:
+---------+------------+
| task_id | subtask_id |
+---------+------------+
| 1       | 2          |
| 3       | 1          |
| 3       | 2          |
| 3       | 3          |
| 3       | 4          |
+---------+------------+
输出:
+---------+------------+
| task_id | subtask_id |
+---------+------------+
| 1       | 1          |
| 1       | 3          |
| 2       | 1          |
| 2       | 2          |
+---------+------------+
解释:
Task 1 被分成了 3 subtasks (1, 2, 3)。只有 subtask 2 被成功执行, 所以我们返回 (1, 1) 和 (1, 3) 这两个主任务子任务对。
Task 2 被分成了 2 subtasks (1, 2)。没有一个subtask被成功执行, 因此我们返回(2, 1)和(2, 2)。
Task 3 被分成了 4 subtasks (1, 2, 3, 4)。所有的subtask都被成功执行,因此对于Task 3,我们不返回任何值。

数据准备:

Create table If Not Exists Tasks (task_id int, subtasks_count int)
Create table If Not Exists Executed (task_id int, subtask_id int)
Truncate table Tasks
insert into Tasks (task_id, subtasks_count) values ('1', '3')
insert into Tasks (task_id, subtasks_count) values ('2', '2')
insert into Tasks (task_id, subtasks_count) values ('3', '4')
Truncate table Executed
insert into Executed (task_id, subtask_id) values ('1', '2')
insert into Executed (task_id, subtask_id) values ('3', '1')
insert into Executed (task_id, subtask_id) values ('3', '2')
insert into Executed (task_id, subtask_id) values ('3', '3')
insert into Executed (task_id, subtask_id) values ('3', '4')

分析:

①准备知识 首先先学习一个循环recursive

构造一个 1 - 10 的列表

(先将1作为number列的值  连接 每一个 number+1 直到number值为10)

with recursive number_series as (select  1 as numberunion all select number+1 as numberfrom number_serieswhere number < 10
)
select * from number_series;

②根据上述知识构造出所有的任务对

(从tasks表中取出任务id 和 任务总数  连接循环的任务id 和 任务总数-1 --> 任务编号 直到 任务编号为1 , 就是将任务总数 依次减一 扩散出它的所有任务编号)

with recursive subtasks as(select task_id,subtasks_count as sub_id from Tasksunion allselect task_id,sub_id-1from subtaskswhere sub_id > 1
)
select subtasks.task_id,sub_id from subtasks

③将此表与Executed表进行左连接  过滤出executed表中为空的那行任务对

with recursive subtasks as(select task_id,subtasks_count as sub_id from Tasksunion allselect task_id,sub_id-1from subtaskswhere sub_id > 1
)
select subtasks.task_id,sub_id subtask_id from subtasks left join Executed
on Executed.task_id = subtasks.task_id and Executed.subtask_id = subtasks.sub_id
where Executed.subtask_id is null;

代码:

with recursive subtasks as(select task_id,subtasks_count as sub_id from Tasksunion allselect task_id,sub_id-1from subtaskswhere sub_id > 1
)
select subtasks.task_id,sub_id subtask_id from subtasks left join Executed
on Executed.task_id = subtasks.task_id and Executed.subtask_id = subtasks.sub_id
where Executed.subtask_id is null;

总结:

掌握 用recursive循环 构造数列

先用1作为起点 

再将一个值作为where 终点 此处来源表为recursive后的表

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 欧美游戏市场的差异
  • echarts实现地图下钻并解决海南群岛显示缩略图
  • 快速使用react 全局状态管理工具--redux
  • 红队打点的思路与信息收集
  • 2025秋招LLM大模型多模态面试题(六)-KV缓存
  • Spring 源码解读:实现自定义注解处理器
  • Leetcode 和为 K 的子数组
  • 【面向对象】设计模式分类
  • arm和riscv系统调用对比(笔记)
  • 线程调优——调整线程池参数提升程序执行效率
  • git-fork操作指南
  • Linux6-vi/vim
  • Snowflake的“AI + 数据” 模式,如何颠覆传统数据处理!
  • 掌握 Flutter 中的 `Overlay` 和 `OverlayEntry`:弹窗管理的艺术
  • 大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍
  • Akka系列(七):Actor持久化之Akka persistence
  • Apache Zeppelin在Apache Trafodion上的可视化
  • echarts花样作死的坑
  • Laravel 中的一个后期静态绑定
  • mysql 5.6 原生Online DDL解析
  • React Native移动开发实战-3-实现页面间的数据传递
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Spring Boot快速入门(一):Hello Spring Boot
  • spring boot下thymeleaf全局静态变量配置
  • 百度地图API标注+时间轴组件
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 给新手的新浪微博 SDK 集成教程【一】
  • 构造函数(constructor)与原型链(prototype)关系
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何设计一个比特币钱包服务
  • 删除表内多余的重复数据
  • 网络应用优化——时延与带宽
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #565. 查找之大编号
  • #传输# #传输数据判断#
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (论文阅读30/100)Convolutional Pose Machines
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转) 深度模型优化性能 调参
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .apk 成为历史!
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net 连接达梦数据库开发环境部署
  • .net 生成二级域名
  • //解决validator验证插件多个name相同只验证第一的问题
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @Value读取properties中文乱码解决方案
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [AIGC] 深入浅出 Python中的`enumerate`函数