SQL-leetcode-180. 连续出现的数字

180. 连续出现的数字

表:Logs

±------------±--------+
| Column Name | Type |
±------------±--------+
| id | int |
| num | varchar |
±------------±--------+
在 SQL 中,id 是该表的主键。
id 是一个自增列。

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

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

结果格式如下面的例子所示:

示例 1:

输入:
Logs 表:
±—±----+
| id | num |
±—±----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
±—±----+
输出:
Result 表:
±----------------+
| ConsecutiveNums |
±----------------+
| 1 |
±----------------+
解释:1 是唯一连续出现至少三次的数字。

题解

  • 连续问题
    应该想到lag、lead偏移函数,把数据进行规整打横
  • 至少连续出现三次的数字
    是不是把表通过顺序打横,错位就行?

思考:针对这类问题,你就细想,怎么实现呢?
sql又不是代码,没办法计数,还要连续,怎么办呢?起码应该想到的就是组合?
怎么组合? union、join、有没有现成的函数?也没别的方式了呀,心里kemo【模拟】一下,很显然union是不行的,只能join,咋join呢?

于是乎就想到了这2种方法:

方法一 表自关联

不是要至少连续三次吗?把连续三次的搞出来呗

表自关联三次,因为数据是有序的,那是不是把第二张表向上平移下,第三张表再向上平移下就可以了呢? 边看结果边思考,样图如下

selectl1.num as ConsecutiveNums
from logs l1 join logs l2 join logs l3
on l1.id=l2.id-1 and l2.id=l3.id-1
where l1.num=l2.num and l2.num=l3.num

在这里插入图片描述

方法二 lag、lead偏移函数

先找找定义,官网或者百度一下就清楚了,看到函数说明以后心里的石头终于落地了,太简单了吧?
lead一下抵扣咱们join三次呀,搞起搞起!!!

Lag函数:将数据向下偏移
Lag函数可以将数据向下偏移指定的行数,使得上方的数据出现空值。例如,你可以使用Lag函数来计算用户的复购间隔,或者在其他需要上下文计算的场景中使用。

语法:
Lag(expression, offset, default_value) over ()
– expression:要取的列名
– offset:取偏移后的第几行数据
– default_value:没有符合条件的默认值

🔄 Lead函数:将数据向上偏移
与Lag函数相反,Lead函数将数据向上偏移指定的行数,使得下方的数据出现空值。这种功能在处理时间序列数据或者需要前瞻性计算时非常有用。

语法:
Lead(expression, offset, default_value) over ()
– expression:要取的列名
– offset:取偏移后的第几行数据
– default_value:没有符合条件的默认值

select tmp.num as ConsecutiveNums from (select id,num,lead(num,1,null) over() as col_2,lead(num,2,null) over() as col_3from logs
) tmp where tmp.num = tmp.col_2 and tmp.num = tmp.col_3

在这里插入图片描述
在这里插入图片描述

ddl

create database test2024;
use test2024;
create table logs (id int primary key , num int);
insert into logs values(1,1),(2,1),(3,1),(4,2),(5,1),(6,2),(7,2);

万变不离其宗,高级函数只是为了让我们使用起来更方便,其实没啥了不起的,别怕,战略藐视。。。。

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

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

相关文章

【教程】通过Docker运行AnythingLLM

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 官方教程:Local Docker Installation ~ AnythingLLM 1、先创建一个目录用于保存anythingllm的持久化文件: sudo mkdir /app su…

soular使用教程

用 soular 配置你的组织,工作更高效!以下是快速上手的简单步骤:  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责的清晰分配。  1.1 用…

Github - 如何提交一个带有“verified”标识的commit

Github - 如何提交一个带有“verified”标识的commit 前言(Why) 今天在Github上浏览某项目的commit记录的时候发现,有的commit记录带有verified绿色标识,有的带有橘色的Unverified标识,还有的什么都不显示。 既然我是根正苗红的作者(bushi)…

基于Bregman的交替方向乘子法

目录标题 ADMM方法简介Bregman散度Bregman ADMM的原理主要优势代码示例:各个符号的解释:**梯度的几何含义**:具体数学公式:**应用示例**:**ADMM的标准形式:****ADMM中的变量角色:****ADMM中的更…

【操作系统】课程 3进程同步与通信 同步测练 章节测验

3.1知识点导图 无 3.2进程同步与互斥 【本章学习目标】 (1)了解进程通信的机制和通信方式。 (2)理解多道程序环境下进程间通信的机制;消息传递系统的实现。 (3)掌握临界资源和临界区的概念…

React中最优雅的异步请求

给大家分享在React19中使用useSuspense处理异步请求为什么是被认为最优雅的解决方案 一. 传统方案 解决异步请求的方案中,我们要处理至少两个最基本的逻辑 正常的数据显示数据加载的UI状态 例如: export default function Index(){const [content, …

《机器视觉:开启智能新时代》

《机器视觉:开启智能新时代》 一、机器视觉:工业之眼的崛起二、核心组件:构建精准视觉系统(一)光源:照亮视界的画笔(二)镜头:聚焦精准的慧眼(三)相…

STM32F103RCT6学习之四:定时器

1.基础 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、…

3DMAX镂空星花球建模插件FloralStarBall使用方法

3DMAX镂空星花球建模插件FloralStarBall使用教程 就是那个3DMAX镂空星花球建模,再也不用手动做了,使用3DMAX镂空星花球建模FloralStarBall插件可以一键生成! 3DMAX镂空星花球建模插件FloralStarBall,经典星形球体的美丽变体。星形…

Nginx区分PC端和移动端访问

在使用Nginx时,可以通过$http_user_agent变量来判断用户访问的客户端类型,从而提供不同的内容或服务。下面是一个基于$http_user_agent变量来判断是否为PC访问的Nginx配置示例。 1. 理解$http_user_agent变量的含义及其在Nginx中的用途 $http_user_agen…

Jmeter快速入门

目录 1.安装Jmeter 1.1.下载 1.2.解压 1.3.运行 2.快速入门 2.1.设置中文语言 2.2.基本用法 1.安装Jmeter Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。 1.1.下载 可以Apache Jmeter官网下载,地址…

Ftrans数据摆渡系统 搭建安全便捷跨网文件传输通道

一、专业数据摆渡系统对企业的意义 专业的数据摆渡系统对企业具有重要意义,主要体现在以下几个方面‌: 1、‌数据安全性‌:数据摆渡系统通过加密传输、访问控制和审计日志等功能,确保数据在传输和存储过程中的安全性。 2、‌高…

Jupyter在运行上出现错误:ModuleNotFoundError: No module named ‘wordcloud‘

问题分析:显示Jupyter未安装这个模板 解决办法:在单元格内输入:!pip install wordcloud

JS媒体查询之matchMedia API 实现跟随系统主题色切换效果

📊写在前面 在网页设计中,跟随系统主题切换可以通过CSS和JavaScript实现。可以通过定义两套CSS变量,根据系统主题的颜色来切换变量的生效,从而实现不同主题下的页面样式变化。 例如,可以使用媒体查询API来获取系统主题…

PageRank Web页面分级算法 HNUST【数据分析技术】(2025)

1.理论知识 算法原理PageRank 通过网络浩瀚的超链接关系来确定一个页面的等级。 Google 把从 A 页面到 B 页面的链接解释为A页面给B页面投票, Google 根据投票来源(甚至来源的来源, 即链接到A页面的页面)和投票目标的等级来决定新…

OTA场景使用mbed TLS 进行 MD5 校验

应用场景: OTA或者IAP等升级场景,或者数据传输过程中的文件校验. 在使用 mbed TLS 进行 MD5 校验时,首先需要理解 MD5 是一种哈希算法,用于生成一个 128 位(16 字节)的哈希值,通常用于校验数据…

6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]

Gin 是一个用 Go 语言编写的 HTTP Web 框架,以其高性能和简洁的 API 而闻名。它提供了一套强大的路由功能,使得开发者可以轻松地定义 URL 路由规则,并将这些规则映射到具体的处理函数(handler)。以下是关于 Gin 路由的…

路过石岩浪心古村

周末常去的七彩城堡儿童乐园附近经常有老房子,没想到老房子最多的地方还是浪心古村。而且越看越有历史。 见到一座写着《序西书室》的房子,我最开始以为是一个古代的学校。但是查了百度更加不知道什么意思了哈。‌“序西书室”‌是指《文心雕龙》中的一个…

[江科大STM32] 第五集STM32工程模板——笔记

保存,进去选芯片型号,我们是F10C8T6 再添加一些文件,自己看路径 然后去 复习这三文件 打开KEIL add existing那个,添加已经存在的文件 还有5个.c.h文件也要添加进来 回到KEIL 点击旁边的settings 如果你用寄存器开发就建到这里就可…

目标检测,语义分割标注工具--labelimg labelme

1 labelimg labelimg可以用来标注目标检测的数据集, 提供多种格式的输出, 如Pascal Voc, YOLO等。 1.1 安装 pip install labelimg1.2 使用 命令行直接输入labelimg即可打开软件主界面进行操作。 使用非常简单, 不做过细的介绍&#xff0…