1.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第二的位置;

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

方法三:

用到的表:

累计值计算语句:


逻辑:


你可能感兴趣的:(1.sql求累计值)