MySQL基础练习题48-连续出现的数字

目录

题目

准备数据

分析数据


题目

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

准备数据

sql 复制代码
## 创建库
create database db;
use db;

## 创建表
Create table If Not Exists Logs (id int, num int)

## 向表中插入数据
Truncate table Logs
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')

分析数据

复制代码
1 是唯一连续出现至少三次的数字。

遇见连续性问题,需要两列差值相同的,最后进行相减,相同的即为连续。

第一步:根据num分组,id排序进行排名

sql 复制代码
select *,
       row_number() over (partition by num order by id) rn
from logs;

第二步:算差值,将id列减去rn列的值

sql 复制代码
with t1 as (
    select *,
           row_number() over (partition by num order by id) rn
    from logs
) select *,
         (id - cast(rn as signed)) as diff
from t1;

注意:rn列需要强制性转化

sql 复制代码
with t2 as (
    with t1 as (
        select *,
               row_number() over (partition by num order by id) rn
        from logs
    ) select *,
             (id - cast(rn as signed)) as diff
    from t1
) select
    distinct t2.num as ConsecutiveNums
from t2
group by t2.num,t2.diff
having count(t2.diff) >= 3;
相关推荐
Arva .3 小时前
深分页与游标
数据库·oracle
idolao3 小时前
MySQL 5.7 安装教程:详细步骤+自定义安装+命令行客户端配置(Windows版)
数据库·windows·mysql
20年编程老鸟java+ai全栈4 小时前
mysql、pg、oracel数据库迁移避坑指南
数据库·mysql
Rsun045514 小时前
Redis中实现访问量计数
数据库·redis·缓存
西柚0014 小时前
Ubuntu22.04.5 + Docker + MySQL 5.7
mysql·docker·容器
小羊子说4 小时前
Android系统中 socketpair 的源码解读与应用分析小结
android·java
天空属于哈夫克34 小时前
自动化素材中枢:实现云端文件与外部群消息的异步同步方案
数据库·oracle
Navicat中国5 小时前
Navicat Premium Lite 正式登录鸿蒙应用市场
数据库·华为·harmonyos·navicat
Yvonne爱编码5 小时前
数据库---Day 1 数据库基础
数据库·mysql·oracle