MYSQL中使用SQL求累计值

MYSQL中使用SQL求累计值

方法一:使用窗口函数 sum() over()

原始表:
在这里插入图片描述
运行语句:
在这里插入图片描述

方法二:使用变量

累计值和序号可以通过窗口函数计算得出,但窗口函数对my sql版本有限制,低版本的my sql无法使用,因此,可以用变量计算。
1、用户变量的基本运算逻辑:
在一个会话内,只需要初始化一次,之后在会话内都是对上次计算的结果再次计算(相当于是在这个会话内的全局变量)
2、mysql中,用户变量不用事前申明,直接用“@变量名”就可以使用
第一种:set @num= 1 或者 set @num:=1 ; ------------这里用set语句创建并初始化变量

第二种:select @num:=1 或者 @num:=字段名 from 表

*** 一定要定义初始值,否则每跑次数据,数据都会有变化
*** 排序会影响结果输出,因此,最好还是用order by,使数据按照自己想的排序

3、案例:求累计值
创建如下表leiji,计算val累计值(不同的month,不同的dept 计算累计值):
在这里插入图片描述
leij列为累计值:
在这里插入图片描述
语句解释:
@val------------定义的变量
@val := 0-----------赋值变量初始值为0
@val:=A.val+@val ---------求累计和公式

案例里,第一次运算:A.dept = a ,@dept 为空,根据上面的IF公式,两者不相等,因此,@val=A.val= 11,leij列第一个值为11;

根据变量的内部运算逻辑: 在一个会话内,只需要初始化一次,之后在会话内都是对上次计算的结果再次计算。

第一次运算结果@val =11,因此第二次运算 @val初始值为11。

第二次运算:A.dept = a,@pe_id = a,根据IF公式,两者相等,得新的@val = 11+ 21 =32,将新值存放在leij第二的位置;

依次类推,可以求出累计值。

方法三:使用JOIN

用到的表:
在这里插入图片描述
累计值计算语句:
在这里插入图片描述
逻辑:
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值