力扣(LeetCode)数据库180 连续出现的数字 题解

数据库 180、连续出现的数字

编写一个 SQL 查询,查找所有至少连续出现三次的数字。
SQL架构:

Create table Logs (Id int, Num int)
insert into Logs (Id, Num) values ('1', '1')
insert into Logs (Id, Num) values ('2', '1')
insert into Logs (Id, Num) values ('3', '1')
insert into Logs (Id, Num) values ('4', '2')
insert into Logs (Id, Num) values ('5', '1')
insert into Logs (Id, Num) values ('6', '2')
insert into Logs (Id, Num) values ('7', '2')
IdNum
11
21
31
42
51
62
72

例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

题解:

select distinct Num as firstNum
from(select num,COUNT(*) num_count from(
--获取到对每条数据编号从1开始使用row_number()函数使用id,这些num值一样的进行排序
--两个相减之后,是相等的,则相减的值是一样的。如果不连续的话相减值不一样。
select Id,Num, ROW_NUMBER() over(order by id)-ROW_NUMBER() over (partition by num order by id) AS orde from Logs
)as a
--通过num和orde两个共同分组找到一样的一共有几个,我们就可以找到连续的了。
group by num,orde)as b
where num_count>=3

到此就结束啦,快去练习一下吧!欢迎大佬和小Monkey沟通。
在这里插入图片描述

感谢大佬指正 小Monkey
如果你觉得有用的话,就留个赞吧!蟹蟹

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猴麦麦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值