【问题标题】:Cumulative Sum of column doesn't work列的累积总和不起作用
【发布时间】:2017-06-02 12:53:12
【问题描述】:

我正在尝试对列 due_pis 进行累积总和,使用以下方法:

set @csum := 0;
select SUM(e.vl_taxe) as vl_taxe, 
SUM(CASE WHEN e.hold_pis = 0 THEN e.due_pis ELSE 0 END) as total, 
(@csum := @csum + SUM(CASE WHEN e.hold_pis = 0 THEN e.due_pis ELSE 0 END)) as cumulative_sum
FROM taxes as e 
WHERE e.id_enterprise = 1 
AND (e.dt_taxe BETWEEN '2016-12-01' AND '2017-04-01' ) AND lg_cancel = 0 
GROUP BY e.dt_taxe

结果是:

vl_taxe     total   cumulative_sum

24850.76    1.37     1.37
31444.64    1.26     1.26
32329.27     0        0
33654.82    1.37     1.37
39682.94     0        0

但是,我想得到这个:

vl_taxe     total   cumulative_sum

24850.76    1.37     1.37
31444.64    1.26     2.63
32329.27     0       2.63
33654.82    1.37     4
39682.94     0       4

【问题讨论】:

标签: mysql sql cumulative-sum


【解决方案1】:

获取每个日期的总和值,然后指定order by 以获得所需的累积总和。

set @csum := 0;

select dt_taxe,
vl_taxe,
total,
@csum := @csum + total as cumulative_sum
from (select e.dt_taxe,
      SUM(e.vl_taxe) as vl_taxe, 
      SUM(CASE WHEN e.hold_pis = 0 THEN e.due_pis ELSE 0 END) as total
      FROM taxes as e 
      WHERE e.id_enterprise = 1 
      AND (e.dt_taxe BETWEEN '2016-12-01' AND '2017-04-01') 
      AND e.lg_cancel = 0 
      GROUP BY e.dt_taxe
     ) t 
ORDER BY dt_taxe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2019-02-15
    • 2016-10-18
    • 2023-03-14
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多