mysql 查询变量@i:=@i+1

        学习完mysql的查询:基本查询,连接查询和子查询和mysql 正则表达式查询,接下来先学习下变量查询。

        mysql中没有oracle序列号那一列。mysql可以使用查询变量的方式去处理。我们先了解下查询变量,后面应用起来就更清晰。

1,定义

        MySQL查询变量是指在MySQL查询语句中使用的变量,可以在查询语句中定义和使用,用于存储和传递数据。查询变量可以是用户定义变量或系统变量,用户定义变量需要使用@符号来表示,系统变量则不需要。

2,使用语法

        MySQL查询变量可以在查询语句中定义和使用,定义时需要使用SET语句,格式如下:

SET @变量名 = 值;

1,系统变量:

1,局部修改(会话级别):只针对当前自己客户端当次连接有效

语法:

set 变量名= 新值;

比如:

-- 设置查询变量
SET @myVariable := 0; 
-- 使用查询变量进行操作
SELECT @myVariable := @myVariable + 1 AS counter; 
-- 重置查询变量
SET @myVariable := 0;

查看变量名:

语法:

select @变量名;

比如:

SELECT @myVariable;

2,全局修改:针对所有的客户端,“所有时刻都”有效

语法:

set global 变量名 = 值;

        这个很少去操作这。更多用局部变量。

2,select 单个的:

        在from 后面初始变量值,声明的话,select那边就可以

SELECT (@i:=@i+1) AS 序号 FROM (SELECT @i:=0) AS temp;

3,局部变量

        作用范围在begin到end语句块之间,在该语句块里设置的变量

        declare语句专门用于定义局部变量

语法:

declare 变量名 数据类型 [属性];

        1、局部变量使用declare关键字声明,(没有该语句则不视为局部变量)

        2、局部变量declare语句出现的位置一定是在begin和end之间(begin end是在大型语句块中使用:函数/存储过程/触发器)

3,作用:

        MySQL查询变量可以用于存储和传递数据,常用于条件查询、流程控制等方面。

        例如,可以使用查询变量实现动态条件查询:

SET @id = 18;
SELECT * FROM 表名 WHERE id = @id;

        可以使用查询变量实现条件判断:

SET @flag = 1;
IF @flag = 1 THEN
SELECT * FROM 表名;
SELECT * FROM 表名 WHERE 列名 = 值;
END IF;

4,优缺点:

        MySQL查询变量的优点是可以提高查询效率,避免重复查询,同时可以实现动态查询和条件判断等功能。

        缺点是使用不当可能导致查询结果不准确,同时需要注意变量的作用域和生命周期,避免出现变量值被覆盖或未定义的情况。

        MySQL查询变量是一种在查询语句中定义和使用的变量,可以用于存储和传递数据,常用于条件查询、流程控制等方面。使用查询变量可以提高查询效率,避免重复查询,同时可以实现动态查询和条件判断等功能。但需要注意变量的作用域和生命周期,避免出现变量值被覆盖或未定义的情况。

5,应用:

0,数据准备:

-- 建表
DROP TABLE IF EXISTS employee;
CREATE TABLE employee(id INT NOT NULL AUTO_INCREMENT,NAME VARCHAR(10),salary DECIMAL(10,2),dept_id INT DEFAULT 0,PRIMARY KEY(id)
);-- 插入数据:
INSERT INTO employee VALUES
(1,'jack', 7000, 1),
(2, 'tom', 8000, 1),
(3, 'joe', 8000, 1),
(4, 'dell', 9000, 2),
(5, 'ken', 10000, 2),
(6, 'tim', 6000, 3),
(7, 'steven', 7000, 3),
(8, 'tank', 9000, 1),
(9, 'tolly', 10000, 1),
(10, 'jony', 12000, 1),
(12, 'jenny', 12000, 2),
(15, 'jams', 13000, 3),
(19, 'west', 16000, 3);

1,查询序号:

SELECT (@i:=@i+1) AS 序号, id, NAME
FROM employee, (SELECT @i:=0) AS temp;

查询结果:

2,统计数量

        由上面的序号可以知道数量,直接再获取其最大值:

SELECT MAX(count_num) count_num FROM (
SELECT (@count:=@count+1) AS count_num
FROM employee, (SELECT @count:=0) AS temp
) AS temp2;

3,求和

        统计上面id的和的值

SELECT MAX(sum_num) sum_num FROM (
SELECT (@count:=@count+e.id) AS sum_num
FROM employee e, (SELECT @count:=0) AS temp
) AS temp2;

4,统计各部门的人数

直接sql:
SELECT dept_id, COUNT(1) AS staff_num 
FROM employee e GROUP BY e.dept_id;

用变量的方式:

        处理思路: 要根据dept_id聚合,一个变量肯定不够,要声明一个变量pre,赋值dept_id。

如果pre变量的值,跟dept_id值是一样的,则count加1

sql:

SELECT *, @count:=IF(@pre=dept_id, @count+1, 1) AS cout_num, @pre:=dept_id AS pre 
FROM employee,(SELECT @count:=0, @pre:=NULL) v;

        由结果可知,因为dept_id是分散的,计算值是根据顺序来的。

        再加一层排序。

SELECT *, @count:=IF(@pre=dept_id,@count+1,1) AS cout_num, @pre:=dept_id AS pre 
FROM employee,(SELECT@count:=0, @pre:=NULL) v
ORDER BY dept_id;

        这样结果就符合初步想要的了。

        然后再进行过滤下:

 SELECT dept_id, MAX(cout_num) AS staff_num FROM (SELECT dept_id, @count:=IF(@pre=dept_id,@count+1,1) AS cout_num, @pre:=dept_id AS pre FROM employee,(SELECT@count:=0, @pre:=NULL) vORDER BY dept_id
) AS temp3 GROUP BY dept_id;

总结:

        mysql查询变量很强大,mysql没有序列号的,就可以直接用这种方式。 还有其它很多应用的地方,后续有遇到再补充。

        上一篇: 《mysql 正则表达式查询》

        下一篇: 《mysql 变量查询题目》

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

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

相关文章

“弱智吧”才是人类面对AI的最后一道堡垒

在 AI 的研究领域中,语言模型的训练数据选择一直是一个关键问题。传统的智慧告诉我们,高质量的数据集应该是由专家精心挑选和校对的文本组成,以确保模型学习到的语言是规范、准确、有文化内涵的。 然而,最近的一项研究颠覆了这一观…

【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

📝个人主页:哈__ 期待您的关注 在日常使用Java的时候,我们都接触过new这个关键字,那你是否知道在我们的对象真正创建出来之前都做了哪些事情呢? 实际上要去判断一个类的初始化的顺序,需要分一下情况&…

Bean的默认名称

1.使用spring的注解 Component、Repository、Service、Controller 等注解去把一个类配置为bean时,如果不指定bean的名称,那么bean的名称的默认规则是: ①类名的首字母小写,例如:类名称 UserDao ,那么默认的…

C++笔记:STL容器库的使用

前置: 对于stl容器库,我只做了一些常用的笔记,关于更详细的使用可以参考:https://cppreference.com/https://cppreference.com/ 一.string--字符串 对于C中string字符串会比C语言的字符数组使用起来会顺手许多。 命名空间:std 关于…

使用串口给ESP8266发送AT指令无反应解决

解决方法:重新烧录固件 设置PC机波特率 设置PC机上的端口波特率和flash下载工具中的波特率一致,否则flash下载工具会一直提示串口连接失败。我这里将PC机上的串口波特率设置为115200,然后flash下载工具波特率也设置为115200 Windows系统上…

电脑远程控制esp32上的LED

1、思路整理 首先esp32需要连接上wifi 然后创建udp socket 接受udp数据 最后解析数据,控制LED 2、micropython代码实现 import network from socket import * from machine import Pin p2Pin(2,Pin.OUT)def do_connect(): #连接wifi wlan network.WLAN(network.…

芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第三集】芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 新颖高效AsDDet检测头组合改进,适用于 YOLOv8 …

超详细解读Transformer框架

Transformer是由谷歌大脑2017年在论文《Attention is All You Need》中提出的一种序列到序列(Seq2Seq)模型。自提出伊始,该模型便在NLP和CV界大杀四方,多次达到SOTA效果。NLP领域中,我们所熟知的BERT和GPT就是从Transformer中衍生出来的预训练…

使用Ollama在本地运行AI大模型gemma

1.下载: https://github.com/ollama/ollama/releases 2.配置环境变量 我的电脑-右键-属性-系统-高级系统设置-环境变量-【系统环境变量】新建 变量名:OLLAMA_MODELS (固定变量名) 变量值:E:\Ollama\Lib &#xff0…

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑)

引言 在 iOS 开发中,将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下,我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而,如果你没有 Mac 电脑,也没有关系,本文将介绍一…

express里面的鉴权及express-session中间件的使用总结

了解 HTTP 协议的无状态性是进一步学习 Session 认证机制的必要前提。http 协议的无状态性,指的是客户端的每次 http 请求都是独立的,连续多个请求之间没有直接的关系,服务器不会主动保留每次 http 请求的状态。 什么是 Cookie Cookie 是存储…

如何在CentOS安装Nexus容器无公网IP远程管理本地仓库

文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus Nexus是一个仓库管理工具,用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关,可…

LeetCode-394. 字符串解码【栈 递归 字符串】

LeetCode-394. 字符串解码【栈 递归 字符串】 题目描述:解题思路一:辅助栈法解题思路二:递归法解题思路三:0 题目描述: 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string]…

ios swift5 “Sign in with Apple“(使用苹果登录)怎样接入(第三方登录)集成AppleID登录

文章目录 截图1.在开发者网站的app id中添加Sign in with Apple功能2.在Xcode中添加Sign in with Apple功能3.代码:只有第一次登录的时候可以获取到用户名参考博客chatGPT答案 截图 1.在开发者网站的app id中添加Sign in with Apple功能 1.1 如果你新建app id,记得在…

Spring事务简介,事务角色,事务属性

1.Spring事务简介 事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据操作同成功同失败 public interface PlatformTransactionManager{void commit(TransactionStatus status) throws TransactionE…

plasmo开发浏览器插件动态setIcon修改插件图标和setBadgeText显示徽标

动态修改图标和设置徽标主要用到action这个api,官网地址:https://developer.chrome.com/docs/extensions/reference/api/action?hlzh-cn#method-setIcon 如果你使用官方原生的方式开发,加载和修改图标应该是比较简单的,但是如果…

C语言面试题之合并排序的数组

合并排序的数组 实例要求 1、给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B; 2、编写一个方法,将 B 合并入 A 并排序; 3、初始化 A 和 B 的元素数量分别为 m 和 n; 示例: 输入: A [1,2,3,0…

小剧场短剧剧集收费短剧小程序APP

1. 内容展现 付费、免费、任务解锁:用户可以通过付费直接观看短剧,也可以通过完成平台任务(如签到、分享等)获得免费观看的机会。这种灵活的解锁方式既满足了用户的多种需求,也促进了平台的活跃度。主流展现形式&…

蓝桥杯简单模板

目录 最大公约数 两个数的最大公约数 多个数的最大公约数 最小公倍数 两个数的最小公倍数 多个数的最小公倍数 素数 ​编辑 位数分离 正写 ​编辑 反写 闰年 最大公约数 两个数的最大公约数 之前看见的是辗转相除法,例如现在让算一个49,21…

libVLC 提取视频帧使用OpenGL渲染

在上一节中,我们讲解了如何使用QWidget渲染每一帧视频数据。 由于我们不停的生成的是QImage对象,因此对 CPU 负荷较高。其实在绘制这块我们可以使用 OpenGL去绘制,利用 GPU 减轻 CPU 计算负荷,本节讲解使用OpenGL来绘制每一帧视频…