温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL中怎么自定义变量

发布时间:2021-07-13 16:19:25 来源:亿速云 阅读:194 作者:Leah 栏目:数据库

MySQL中怎么自定义变量,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1.自定义变量---自我介绍

大家好,我是mysql自定义变量,和其他的自定义变量一样,你们可以把我当作一个小盒子,如果想要召唤我只要大喊一声

set @ver:='x'

就可以召唤出自定义变量本量,顺便把x放装进了盒子。

当然我除了可以装x,

还可以装b,心中默念 set @ver:='b' 就可以装逼成功

如果心情不好我还可以啥也不装

比如set @ver:=0

如果召唤我请珍惜我,因为我在一次mysql链接中有效。

不要以为我只能散装,把我安装在生产线上照样能行。

比如某条sql生产出来一个指标需要存一下,只需要把结果into我就行了,具体操作如下:

select count(1) into @ver from table

想跟装进去的东西确认眼神么?select @ver,马上告诉你盒子里现在装了个啥

我一般不会单独存在,而是内嵌到sql语句里面作为一个存储中间变量的容器,如果想知道和我sql语句之间是怎么配合的,就不得不了解一下我的小老弟---sql

2,SQL的自我简介

大家好,我是SQL,是一种数据库操作的工具,也是自定义变量的好大哥。如果能配合EXCEL来了解我,就会发现我不是一个慢热的人。能动手咱就不bb,举个栗子让你看一下我们俩有多像

栗子如下:

select id from  (select id from table1 ) a  join (select id from table2) b on a.id=b.id where a.id>=100 order by id

首先我要执行子查询,也就是把a和b两个中间表搞出来(ab两个表可以理解为excle的两个sheet)

然后我再执行join语句,对两个表根据id进行笛卡尔乘积,得到两个表的全部信息(主键唯一的情况下可以理解为excel的vlookup)

当然有些信息并不是我们需要的,怎么过滤呢,用where语句(相当于excel的筛选功能)

最终以order by 对最终结果进行排序(对应excel的排序功能)

下面说一点细节可以加深我和自定义标量之间的合作方式

当我select 想要的列时候(select id from  table)可以看成是读取了一列id,也可以看成是一行一行读取id列,每取一条记录,游标往下走一格,当遍历完所有的数据之后再呈现给我们一列id。按照第二种方式相当于是python遍历数组,中间自然可以加一些变量来存储一些数据。

有点抽象?举个例子~

3,举几个栗子

某个数据表格记录了AB两个店每个小时的营业额,原始数据如下

CREATE TABLE `wk_test` ( `date` varchar(20) NOT NULL COMMENT '日期', `shop` varchar(255) NOT NULL COMMENT '商店', `hour` int(11) NOT NULL COMMENT '小时', `income` int(11) NOT NULL COMMENT '收入', PRIMARY KEY (`date`,`shop`,`hour`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

 MySQL中怎么自定义变量

1.如何观察每天某个时间点A,B两个店的分别的累计营业额?

按照上面所说的原理,如果每读出一条记录相当于游标往下走一下,我们在遍历数据的过程中用变量对中间结果进行记录和判断,那么就能实现上述需求,代码如下:

--初始化变量  set @cosum:=0;  set @dates:=''; set @shop:='';  select date,shop,hour,income,    @group_income:=  --判断是否是同一天的同一个商店  case when @dates=a.date and @shop=a.shop  --是一个则累加  then @cosum:=@cosum+income  --不是则将第一个小时的值赋值给累加量  else @cosum:=a.income  end as group_income, --保存当前用于判断的变量 @dates:=a.date, @shop:=a.shop from (select * from wk_test order by date,shop,hour) a

结果如下:

MySQL中怎么自定义变量

2.用自定义变量实现row_number()over 开窗mysq不支持开窗函数,但是引入自定义变量就能实现相同的效果,具体实现代码如下:

set @row_number:=0; set @dates:=''; set @shop:='';  select date,shop,hour,income, @num:=case when @dates=a.date and @shop=a.shop then @row_number:=@row_number+1 else @row_number:=1 end as group_income,  @dates:=a.date, @shop:=a.shop from (select * from wk_test order by date,shop,hour) a

结果如下:

MySQL中怎么自定义变量

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI