首页 > 数据库 >MySQL(六)查询连续出现N次问题总结

MySQL(六)查询连续出现N次问题总结

时间:2024-09-10 17:14:49浏览次数:1  
标签:总结 Logs 查询 num 分组 连续 MySQL rownum id

连续问题的本质

  • 单调递增的等差数列
  • 例如游戏连续签到7天可以获得奖品,连续出现3次的数字

求解方法
(1)确定什么属性连续出现三次,即哪一属性连续,哪一属性相等
(2)增加额外的等差递增列,然后进行作差分组

案例 查询至少连续出现3次的数字

  • Logs表:
id num
1 1
2 1
3 1
4 2
5 1
6 2
7 2

1、在本题中,要求id连续,并且num相同
2、增加额外的列,作差分组
(1)构造新属性rownum,作为额外增加的列

select *,row_number() over(partition by num order by id) as rownum from Logs
id num rownum
1 1 1
2 1 2
3 1 3
5 1 4
4 2 1
6 2 2
7 2 3

(2)作差,用连续的列-额外增加的列作为等差数列的差

select *,id-rownum from(
    select *,row_number() over(partition by num order by id) as rownum from Logs
) t2
id num rownum id-rownum
1 1 1 0
2 1 2 0
3 1 3 0
5 1 4 1
4 2 1 3
6 2 2 4
7 2 3 4
  • 可以看到,连续出现的数字,其id-rownum的值都是相等的,即等差,根据这个差进行分组

(3)分组查询

SELECT DISTINCT num
FROM(
SELECT *,
      ROW_NUMBER() OVER (PARTITION BY Num ORDER BY Id) rownum
FROM LOGS
) t
GROUP BY (Id-rownum),num 
HAVING COUNT(*)>=3 #3可以换位任意数字
  • 在上述代码中,不仅根据id-rownum进行分组,还加上了数值相同的列num,原因如下:

Logs表

id num rownum id-rownum
1 1 1 0
3 1 2 1
4 1 3 1
2 2 1 1
  • 在上面这张表中,数字没有连续出现三次,但是id-rownum却是一样的,因此不能仅仅依赖id-rownum进行分组,还要加上num

标签:总结,Logs,查询,num,分组,连续,MySQL,rownum,id
From: https://www.cnblogs.com/shihongpin/p/18398825

相关文章

  • MySQL主从节点运用chrony实现时钟同步
    在数据库主从复制环境中,保持主从节点之间的时间同步是非常重要的,因为数据库的复制操作通常依赖于时间戳。如果主从节点的时钟不同步,可能会导致复制延迟或者数据不一致的情况。使用chrony来同步主从数据库节点的时钟,确保它们的时间保持一致。主节点安装chronyyuminsta......
  • docker-compose部署MySQL高可用工具orchestrator
    主要对一个MySQL主从架构部署orchestartor进行高可用验证,orchestrator部署在主从架构的从节点上,当然最好是部署在其他机器上,后端数据库采用的直接是MySQL的从库,所以没有创建orchestrator的后端数据库的流程。创建yaml文件mkidr/opt/orchecd/opt/orchevimdocker-comp......
  • 简单的算法总结
    算法笔记欧几里得算法求最大公约数~又称辗转相除法,求两数的最大公约数gcd(a,b)=gcd(b,a%b)一般代码递归形式intgcd(inta,intb){ returnb?gcd(b,a%b):a;}迭代形式intgcd(inta,intb){ while(1) { if(b==0)returna; inttemp=a%b; a=b;......
  • MySQL表的操作与数据类型
    目录前言一、表的操作1.创建一个表2.查看表的结构3.修改表 4.删除一个表二、 MySQL的数据类型0.数据类型一览:1.整数类型2.位类型3.小数类型4.字符类型前言在MySQL库的操作一文中介绍了有关MySQL库的操作,本节要讲解的是由库管理的结构——表一、表的操......
  • Python 之PyMysql
    Python之PyMysql目录Python之PyMysqlPymysql教程使用教程Pymysql教程介绍:PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库安装pipinstallPyMySQL使用教程#!/usr/bin/envpython#-*-coding:utf-8-*-##@Author:Alex##_____......
  • MySQL知识学习汇总
    一、存储引擎1.InnoDB引擎        InnoDB是一种兼顾高可靠性高和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎特性:1.支持外键。2.支持事务,遵循事务的ACID特性。3.行锁:MyISAM是对行加锁,锁粒度相较MyISAM引擎的表锁较细。操作时只锁定某......
  • Java面试题大总结(全网最全)
    1、普通类和抽象类有哪些区别?抽象类不能被实例化;抽象类可以有抽象方法,只需申明,无须实现;有抽象方法的类一定是抽象类;抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;抽象方法不能声明为静态、不能被static、final修饰。2、接口和抽象类有什么区别?(1)接口......
  • 53 mysql pid 文件的创建
    前言接上一篇文章  mysql启动过程中常见的相关报错信息 在 mysql中文我们在 “servicemysqlstart”,“servicemysqlstop”经常会碰到 mysql.pid相关的错误信息比如 “TheserverquitwithoutupdatingPIDfile”我们这里来看一下 mysql中 mysql.pid文件的创......
  • 【SpringBoot Demo】MySQL + JPA + Hibernate + Springboot + Maven Demo
    主要包含:springboot+jpa+hibernate+mysql+lombok(两年前写过一个,现在重新记录一个)1. 目录结构: 2.pom 文件1<?xmlversion="1.0"encoding="UTF-8"?>2<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.or......
  • 【昌哥IT课堂】MySQL8.0新特性之不可见主键
     一、概述作为MySQLDBA,相信大家都经历过在复制模式下,如果没有主键,遇到loaddata,大事务,ddl等有大量表数据行扫描的行为时,会带来严重的主从延迟,给数据库稳定性和数据一致性带来隐患。MySQL8.0.30新版本为我们提供了一个新特性-(GeneratedInvisiblePrimaryKeys)简称GI......