首页 > 数据库 >MySQL——连续出现的数字

MySQL——连续出现的数字

时间:2023-05-31 21:47:24浏览次数:47  
标签:语句 数字 用户 num 连续 MySQL id 变量

前置知识

MySQL中变量的分类

  • 系统变量:系统变量由系统提供,不是用户定义的,属于服务器层面。如查看系统所有变量 show global variables;,分为全局变量会话变量
    • 全局变量在MySQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改
    • 会话变量在每次建立一个新的连接的时候,由MySQL来初始化。MySQL会将当前所有全局变量的值复制一份。来做为会话变量
  • 定义变量:变量是用户自定义的,不是系统的,分为用户变量局部变量
    • 局部变量一般用于SQL的语句块中,如存储过程中的begin end语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过程的调用期间
    • 用户变量跟会话变量相似。MySQL中用户变量不用事前申明,在用的时候直接用 @变量名 使用就可以了

局部变量定义语法形式

  • DECLARE var_name [, var_name]... data_type [ DEFAULT value ];

用户变量定义语法形式 

  • @var_name 形式创建用户定义的变量,并且用户定义的变量不区分大小写
  • 名字必须以@开头
  • 声明变量的时候需要使用SET语句
  • 将值分配给用户定义的变量的方式
    • 使用SET语句,使用:==作为SET语句中的赋值运算符:SET @var_name := value; 
    • 使用SELECT语句,使用:=作为语句中的赋值运算符(因为在SELECT语句中,MySQL将=运算符视为相等运算符):SELECT @var_name := value;在赋值之后,可以使用后续语句中允许表达式的变量

题目

编写一个 SQL 查询,查找Logs表中所有至少连续出现三次的数字

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| num         | varchar |
+-------------+---------+
id 是这个表的主键。
============================================================
输入:
Logs 表:
+----+-----+
| Id | Num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+
输出:
Result 表:
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+
解释:1 是唯一连续出现至少三次的数字

解题

方式一:考虑id的连续的,无中断情况

连续出现的意味着相同数字的 Id 是连着的,则可以使用三次内连接来实现

select distinct l1.num as ConsecutiveNums
from 
    logs l1,
    logs l2,
    logs l3
where l1.id + 1 = l2.id and l2.id + 1 = l3.id and l1.num = l2.num and l2.num = l3.num

方式二:考虑id是不连续的

通过定义两个用户变量进行计数即可

select distinct temp.num as ConsecutiveNums
from (
  select 
    num,
    case
      when @prev = num then @count :=@count + 1
      when (@prev := num) is not null then @count := 1
    end as cnt
  from logs,(select @prev := null,@count := null) as t
) as temp
where temp.cnt >= 3

 

标签:语句,数字,用户,num,连续,MySQL,id,变量
From: https://www.cnblogs.com/52-IT-y/p/17444835.html

相关文章

  • 小程序容器助力航空企业数字化转型
    数字化时代,越来越多的企业开始关注数字技术,希望通过数字化改造提高企业效率和竞争力,为企业创造更多的商机和利润。今天就来同大家探讨航空领域,小程序在企业数字化转型中发挥的作用。航空业员工端App的敏捷转型挑战技术上的挑战:多平台兼容性: 航空公司的员工使用不同的设备和操......
  • 比较两个字符串最长有多少个连续字符相等
    比较两个字符串最长有多少个连续字符相等#include<stdio.h>#include<string.h>intcompare(char*a,char*b){inti,j;intlen=0;intmax=0;inttemp=0;for(i=0;i<strlen(a);i=temp,i++){temp=i;for(j=0,len=0;j<strle......
  • mysql参考文档
    mysql数据库官方文档https://dev.mysql.com/doc/refman/8.0/en/https://dev.mysql.com/doc/refman/5.7/en/治愈系的笑容常常让我深陷其中......
  • Mysql的基本操作2
    数据库-----表-----字段createdatabase**是在创建数据库use**使用数据库createtable**是在创建表和字段 DDL表操作-修改添加字段altertable表名add字段名类(长度)[comment注释[约束];修改数据类型altertable表名字段名数据类型(长度)修改字段名和......
  • YashanDB:以自研根技术筑牢企业数字化发展根基
    上世纪90年代我国经济体量剧增信息量以几何级的速度增长大型企业率先引进国际IT厂商来弥补信息化能力的不足从此Oracle、IBM等国际软件厂商在我国生根发芽以数据库行业为例只不过“科技无国界”的神话被逐渐打破过度依赖国外IT技术和产品让业务和数据安全难以保证严重威胁重点行业......
  • MySQL之常用数据类型
    一:MySQL中基本数据类型MySQL数据库表中的每一列都必须具有名称和数据类型。据类型是一个标签,它可以告知存储什么类型的数据,它也标识了SQL如何与存储的数据进行交互。MySQL数据库支持所有标准SQL数值数据类型,涉及大概11种类MySQL数据类型。整数类型:TINYINT、SMALLINT、MED......
  • mysql截取字段
    mysql截取字段:mysql索引从1开始1.从左边截取lengthleft(str,length)length>=02.从右边截取lengthright(str,length)length>=03.substring(str,index)当index>0从左边开始截取直到结束当index<0从右边开始截取直到结束当index=0返回空4.substri......
  • mysql数据类型转换
    AST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。一、语法:CAST(expressionASdata_type)参数说明:expression:任何有效的SQServer表达式。AS:用于分隔两个参数,在AS之前的是要处理的数据,......
  • mysql自定义变量
    1.自定义变量语法:set@变量名:=值;(冒号可以不加)或者select@变量名:=值;(冒号必须加);使用方法:select@变量名;2.基础知识(用了变量后就是先排序):mysql语句的执行顺序:正常是先查询后排序,但是如果使用了变量,就是先排序后查询1)先查询后排序:selectgender,first_nameasname,age......
  • Streamsets读取binlog数据实时同步到MySQL
    原文:https://blog.csdn.net/maomaosi2009/article/details/1082932171、说明实时同步binlog数据到MySQL我使用了2种方式,2、方式一第一种方式较为繁琐,数据从binlog流出,经过JS数据解析器将必要的字段解析出来,流入操作选择器,根据具体需要执行的增删改操作选择最后的JDBCProducer,pi......