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

SQL,力扣题目1285,找到连续区间的开始和结束数字【窗口函数】

一、力扣链接

LeetCode_1285

二、题目描述

表:Logs

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| log_id        | int     |
+---------------+---------+
id 是上表具有唯一值的列。
上表的每一行包含日志表中的一个 ID。

编写解决方案,得到 Logs 表中的连续区间的开始数字和结束数字。

返回结果表按照 start_id 排序。

三、目标拆解

四、建表语句

Create table If Not Exists Logs (log_id int)
Truncate table Logs
insert into Logs (log_id) values ('1')
insert into Logs (log_id) values ('2')
insert into Logs (log_id) values ('3')
insert into Logs (log_id) values ('7')
insert into Logs (log_id) values ('8')
insert into Logs (log_id) values ('10')

五、过程分析

1、窗口函数的连续问题,使用差值法

2、这里计算排名的最大值也可以使用窗口函数,不过order by 后面的字段为倒序

3、流程控制,排名最小的为起始值,排名最大的为结束值

六、代码实现

with t1 as(
select
       log_id,
       row_number() over(order by log_id) rn
       ,log_id - row_number() over(order by log_id) diff    -- 不能减成结果为负数
from logs
)
#    select * from t1;
,t2 as(
select log_id, diff,
       row_number() over(partition by diff order by log_id) rn,
       count(1) over(partition by diff) total
       from t1
)
#    select * from t2;
select max(if(rn = 1, log_id, null)) start_id,     -- 使用聚合函数就行
       max(if(rn = total, log_id, null)) end_id
from t2
group by diff, total
order by start_id;

七、结果验证

八、小结

1、CTE 表达式 + 排名函数 + 聚合函数 + if 条件判断

2、针对排名后数据,计算差值找到连续数字,根据差值分组给组内成员进行排名,根据差值和组内成员总数分组,排名最小的为起始值,排名最大的为结束值

3、聚合函数max() 计算时会忽略null 值

4、count(1) 用来计算总数,数据量大的情况下效率较高

5、连续区间求差值


http://www.kler.cn/a/377995.html

相关文章:

  • docker-compose怎么写注释
  • 2.微服务灰度发布落地实践(agent实现)
  • 24.try块怎么用 C#例子
  • 前端往后端传递参数的方式有哪些?
  • C++(7)—inline和nullptr
  • 15、【OS】【Nuttx】OS裁剪,运行指定程序,周期打印当前任务
  • VsCode前端常用快捷键
  • 冷钱包与热钱包的差异 | 加密货币存储的安全方案
  • 03.DDD六边形架构
  • apache pdfbox 设置PDF表单域,Java生成PDF模板简单案例。
  • 【ARCGIS实验】地形特征线的提取
  • Spring Boot框架下校园社团信息管理的创新实践
  • 图像识别中的高斯滤波和椒盐滤波的适用场景与不同实现
  • SpringBoot 集成 Mybatis-Plus,LambdaQueryWrapper 使用方法
  • Git 本地操作(2)
  • Razor C# 逻辑
  • -XSS-
  • Qt的程序如何打包详细教学
  • React常用前端框架合集
  • Ubuntu下安装和配置MySQL5.7教程
  • C/C++中的基本数据类型
  • Qt——QWidget
  • Java类和对象(上篇)
  • Github 2024-10-30C开源项目日报 Top10
  • 正则表达式学习
  • 【系统架构设计师】2024年上半年真题论文: 论模型驱动架构设计方法及其应用(包括解题思路和素材)