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

news2024/11/26 15:28:32

        学习完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) v
  ORDER BY dept_id
) AS temp3 GROUP BY dept_id;

总结:

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

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

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

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

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

相关文章

【科东软件】鸿道Intewell-Lin_V2.2.0 软件版本发布

鸿道操作系统 Intewell-Lin_V2.2.0 软件版本发布 Intewell-Lin_V2.2.0 版本号:V2.2.0 版本或修改说明 增加功能: 1、增加T3板级支持 支持硬件列表

深入探索实时音视频技术:RTC程序设计权威指南

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

2024年32款数据分析工具分五大类总览

数据分析工具在现代商业和科学中扮演着不可或缺的角色,为组织和个人提供了深入洞察和明智决策的能力。这些工具不仅能够处理大规模的数据集,还能通过强大的分析和可视化功能揭示隐藏在数据背后的模式和趋势。数据分析工具软件主要可以划分为以下五个类别…

网络与通信-路由协议及基础配置

网络协议之路由协议 静态路由: 明细静态 默认静态 动态路由:(可以自动去环) RIP 十几台或几十台 (维护上一代人搭建的网络) OSPF 300台 (最短路径算法) ISIS 1200台 BGP…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…

主流三种驱动器方案特点简介

三种执行器原理相似,但在结构和部件上略有区别,因此在精度、响应速度等指标上 呈现不同效果: (1)TSA(刚性驱动器):常规高速电机高传动比减速机高刚度力矩传感器,减 速机…

【Spring Cloud】服务容错中间件Sentinel入门

文章目录 什么是 SentinelSentinel 具有以下特征:Sentinel分为两个部分: 安装 Sentinel 控制台下载jar包,解压到文件夹启动控制台访问了解控制台的使用原理 微服务集成 Sentinel添加依赖增加配置测试用例编写启动程序 实现接口限流总结 欢迎来到阿Q社区 …

【QingHub】QingHub Studio企业级应用开发管理

QingHub Studio企业级应用开发设计器是QingHub Studio的一个核心模块,它可以实现应用搭建、团队管理,共享开发,可以快速接入API接口,复杂功能可以通过自定义脚本快速实现业务逻辑。打通前端开发与后台业务逻辑一体化。通过可视化的…

Vue - 2( 10000 字 Vue 入门级教程)

一&#xff1a;初识 Vue 1.1 绑定样式 1.1.1 绑定 class 样式 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>绑定样式</title><style>......</style><script type"text/javascript"…

【六 (3)机器学习-机器学习建模步骤/kaggle房价回归实战】

目录 文章导航一、确定问题和目标&#xff1a;1、业务需求分析&#xff1a;2、问题定义&#xff1a;3、目标设定&#xff1a;4、数据可行性评估&#xff1a;5、资源评估&#xff1a;6、风险评估&#xff1a; 二、数据收集&#xff1a;1、明确数据需求2、选择数据来源3、考虑数据…

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件

uniapp在发行原始云打包ios时提示私钥证书不是有效的p12文件 解决方法&#xff1a; 经过我多次的创建p12证书文件&#xff0c;然后更换设备继续创建&#xff0c;仍然存在这个问题&#xff0c;通过排查不是.p12的本身的问题&#xff0c;而是命名的问题&#xff0c;命名不能是中…

你真的了解区块链游戏吗?

随着区块链技术的不断发展和普及&#xff0c;越来越多的人开始关注区块链游戏这一新兴领域。然而&#xff0c;很多人对于区块链游戏的了解仅限于一些表面的概念和特点&#xff0c;真正深入了解的人并不多。那么&#xff0c;你真的了解区块链游戏吗&#xff1f; 首先&#xff0…

外包干了25天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

状态模式(行为型)

目录 一、前言 二、状态模式 三、总结 一、前言 状态模式(State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类&#xff0c;但实际上&#xff0c;由于状态模式的引入&#xff0c;行为的变…

DOM对象(Document Object Model 文档对象模型)

目录 1、什么是DOM 1&#xff09;是一个标准 2&#xff09;是一个对象 2、原理及作用 3、Element元素的获取方法 4、方法使用举例 修改页面内容 1&#xff09;获取DOM元素 2&#xff09;修改元素内容 3&#xff09;修改元素属性 4&#xff09;添加和删除元素 5、应…

电脑硬盘分区表的两种格式:MBR 和 GPT

电脑硬盘分区表的两种格式&#xff1a;MBR 和 GPT 段子手168 2024-4-5 电脑硬盘分区表有两种格式&#xff1a;MBR 和 GPT&#xff1a; 一、MBR 分区表 1.MBR 是主引导记录 (Master Boot Record) 的英文缩写 在传统&#xff08;Legacy&#xff09;硬盘分区模式中&#xff0c…

春秋之境28512

题目说该CMS的/single.php路径下&#xff0c;id参数存在一个SQL注入漏洞。访问看一下随便点一个图片。 发现了注入点?id 那么开始查看闭合符一个 就报错了 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for th…

这些矛盾点不搞清楚,私域怎么做得起来!

最近不少人都在问&#xff0c;私域做不起来怎么办&#xff1f;有很多企业砸了不少钱&#xff0c;有些还做了好几年&#xff0c;依旧没有起色。 有些企业觉得私域做不起来的阻碍有运营方面的原因&#xff0c;比如文案写不好&#xff0c;社群不知道怎么管理&#xff1b;有团队方…

如何搭建企业级MQ消息集成平台

企业级MQ消息集成平台的重要性在于实现不同系统之间的高效、可靠、实时的消息传递和数据交换。它可以帮助企业实现系统解耦&#xff0c;提高系统的可扩展性和灵活性&#xff0c;降低系统间的依赖性。通过消息队列中间件&#xff0c;企业可以实现异步通信、削峰填谷、流量控制等…

华大单片机新建工程步骤

1.新建文件夹&#xff0c;比如00_LED 2.拷贝 hc32f460_ddl_Rev2.2.0\driver 到 00_LED 3.拷贝 hc32f460_ddl_Rev2.2.0\mcu\common 到 00_LED 4.拷贝 hc32f460_ddl_Rev2.2.0\example\ev_hc32f460_lqfp100_v2\gpio\gpio_output\source 到 00_LED 5.拷贝 hc32f460_ddl_Rev2.2.…