【力扣白嫖日记】180.连续出现的数字

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

180.连续出现的数字
表:Logs

列名类型
idint
numvarchar

找出所有至少连续出现三次的数字。

返回的结果表中的数据可以按 任意顺序 排列。


我那不值一提的想法:

  • 首先梳理表内容,题干一共了一张表,记录了id和数字。
  • 其次分析需求,找出连续出现三次的数字
  • 要实现这个需求,需要满足三个条件
  • 第一个,id不同,num值相同
  • 第二个,id之间差值只能是1
  • 第三个,num的数量得大于等于3
  • 要同时满足上面三个条件,我们可以直接三个表连接
  • 第一个条件和第二个条件,s2.id - s1.id = 1 and s3.id - s2.id = 1 and s1.num = s2.num = s3.num
  • 第三个条件,因为是三个表连接,所以要至少得连续三个及以上的相同数字才能符合条件
select distinct s1.num as ConsecutiveNums
from Logs s1,Logs s2,Logs s3
where s1.num = s2.num 
and s2.num = s3.num
and s1.id + 1 = s2.id
and s2.id + 1 = s3.id

这个答案虽然能解决需求,但是我知道这解法只能解连续3个数连续的,如果有更多的就需要更多的表。于是我在neilsons的题解中学到了更高阶的方法。

  • 首先我们需要知道row_number函数,row_number函数用于为结果集中的行分配一个唯一的连续整数值,比如row_number() over(order by num) as series,就是对num进行排序,并且创建series列,里面对应了num从小到大的排序。
  • 对于这道题我们需要对原始数据进行编号,因为题干中并没有提到id是连续的:
select id,num,row_number() over(order by id) as series
from Logs

在这里插入图片描述

  • 其次我们需要对num进行分组排序
select id,num,row_number() over(partition by num order by id) as series
from Logs

在这里插入图片描述
在这里我们可以看到,只要数字连续相同,它在表中的序列-它第几次出现,是一个定值,也就是这样:

select id,num,row_number() over(order by id)-row_number() over(partition by num order by id) as series3
from Logs

在这里插入图片描述

  • 最后我们将其作为一个临时表,查询这个结果,group by num,series,使数量大于等于3,就能得到最终的结果:
select distinct num as ConsecutiveNums 
from 
(select id,num,
row_number() over(order by id) - row_number() over(partition by num order by id) as series
from Logs
) as a 
group by num,series
having count(*) >=3

引用:

https://leetcode.cn/problems/consecutive-numbers/solutions/21537/sql-server-jie-fa-by-neilsons


结果:

  • 三表连接
    在这里插入图片描述
  • row_number()
    在这里插入图片描述

总结:

能运行就行。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频会议参会成员入会时无规律掉线解决方案:奇安信防火墙关闭ALG(反向代理)

【问题描述】 单位组织视频会议,出现很严重的问题是参会人员不能全部入会,多家单位依次都出现这种现象,无法入会的单位不固定。 【问题原因】 抓包查询到上级单位的奇安信防火墙出现了问题。 H323协议和SIP协议的视频流数据包经过防火墙以后…

数字热潮:iGaming 能否推动加密货币的普及?

过去十年,iGaming(互联网游戏)世界有了显著增长,每月有超过一百万的新用户加入。那么,这一主流的秘密是什么?让我们在本文中探讨一下。 领先一步:市场 数字时代正在重新定义娱乐,iG…

Vue3(pinia) 整合 SpringWebsocket链接url动态传参

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:java专栏 📧如果文章知识点有错误的地方,…

挑战杯 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE(递归特征消除法)4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

好狄空气能热水器成功上榜2023年消费者心中的十大信赖品牌

随着环保意识的增强和能源消耗的持续关注,空气能热水器以其高效节能、绿色环保的特性赢得了越来越多消费者的青睐。市场上琳琅满目的空气能热水器品牌让消费者在选择时既兴奋又困惑。究竟哪些品牌能在激烈的竞争中脱颖而出,成为消费者心目中的佼佼者呢&a…

GO数组解密:从基础到高阶全解

在本文中,我们深入探讨了Go语言中数组的各个方面。从基础概念、常规操作,到高级技巧和特殊操作,我们通过清晰的解释和具体的Go代码示例为读者提供了全面的指南。无论您是初学者还是经验丰富的开发者,这篇文章都将助您更深入地理解…

YOLO算法改进Backbone系列之:EfficientViT

EfficientViT: Memory Effificient Vision Transformer with Cascaded Group Attention 摘要:视觉transformer由于其高模型能力而取得了巨大的成功。然而,它们卓越的性能伴随着沉重的计算成本,这使得它们不适合实时应用。在这篇论文中&#x…

掌握C语言指针,轻松解锁代码高效性与灵活性

1. 指针与地址 1.1 概念 我们都知道计算机的数据必须存储在内存里,为了正确地访问这些数据,必须为每个数据都编上号码,就像门牌号、身份证号一样,每个编号是唯一的,根据编号可以准确地找到某个数据。而这些编号我们就…

4.测试教程 - 用例篇

文章目录 1.测试用例的基本要素2.测试用例的给我们带来的好处3.测试用例的设计方法3.1基于需求进行测试用例的设计3.1.1功能需求测试分析3.1.2非功能需求测试分析 3.2具体的设计方法3.2.1等价类3.2.2边界值3.2.3错误猜测法3.2.4判定表3.2.5场景设计法3.2.6因果图3.2.7因果图的需…

Bootstrap引入和使用

Bootstrap 基础用法 目录 Bootstrap 基础用法什么是Bootstrap?引入Bootstrap布局容器栅格系统表格样式表单样式text样式按钮样式图标 什么是Bootstrap? Bootstrap是一个开源的前端框架,用于对HTML和CSS代码进行封装,因此可以直接…

2024年蓝牙耳机哪个好?五大口碑热门爆棚机型力荐!

​长时间的通勤或等待中,我喜欢戴着耳机静静地听音乐,享受那片刻的宁静。对我来说,耳机是生活中不可或缺的数码产品,无论是在路上还是在运动时,我都会随身携带。在这篇文章中,我将分享我对耳机的了解和使用…

buuctf_misc_神秘的龙卷风+另外一个世界+假如给我三天光明

神秘的龙卷风 题目: 题目下载后是一个被加密的压缩包。通过题目可以猜到,压缩包的密码是4位数字,解开后应该是一串编码。咱先用ARCHPR解出口令呗: (攻击类型-暴力,范围是所有数字,范围0000~99…