mysql求累计报表问题

在报表问题中,累计报表是最基础、最普遍的一部分,最近有些朋友一直在询问。

现写下简单的例子,供初学者学习使用。

累计报表问题:
求每人每月的总收入,及其累计(即本月及其以前月份的累计收入)收入;

数据:
username,month,salary
A,2018/01,5
A,2018/01,15
B,2018/01,5.2
A,2018/01,8.7
B,2018/01,25
A,2018/01,5.7
C,2018/01,10.4
C,2018/01,20
A,2018/02,4
A,2018/02,6
C,2018/02,3.0
C,2018/02,11.6
B,2018/02,10.7
B,2018/02,5
A,2018/03,14
A,2018/03,6.5
B,2018/03,20.9
B,2018/03,25
C,2018/03,10
C,2018/03,20
A,2018/04,14
A,2018/04,6.5
B,2018/04,20.9
B,2018/04,25
C,2018/04,10
C,2018/04,20
A,2018/05,14
A,2018/05,6.5
B,2018/05,20.9
B,2018/05,23.5
C,2018/05,10
C,2018/05,20
A,2018/06,14
A,2018/06,6.5
B,2018/06,20.9
B,2018/06,2.5
C,2018/06,10.98
C,2018/06,20.45

建表:
drop table if exists t_user;
create table t_user(
    `id` int NOT NULL AUTO_INCREMENT,
    `username` varchar(16) NOT NULL DEFAULT '0',
    `month` varchar(16) NOT NULL DEFAULT '0',
    `salary` double(12,6) NOT NULL DEFAULT 0.000000,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

导入数据:

insert into t_user(username,month,salary) values
('A','2018/01',5),
('A','2018/01',15),
('B','2018/01',5.2),
('A','2018/01',8.7),
('B','2018/01',25),
('A','2018/01',5.7),
('C','2018/01',10.4),
('C','2018/01',20),
('A','2018/02',4),
('A','2018/02',6),
('C','2018/02',3.0),
('C','2018/02',11.6),
('B','2018/02',10.7),
('B','2018/02',5),
('A','2018/03',14),
('A','2018/03',6.5),
('B','2018/03',20.9),
('B','2018/03',25),
('C','2018/03',10),
('C','2018/03',20),
('A','2018/04',14),
('A','2018/04',6.5),
('B','2018/04',20.9),
('B','2018/04',25),
('C','2018/04',10),
('C','2018/04',20),
('A','2018/05',14),
('A','2018/05',6.5),
('B','2018/05',20.9),
('B','2018/05',23.5),
('C','2018/05',10),
('C','2018/05',20),
('A','2018/06',14),
('A','2018/06',6.5),
('B','2018/06',20.9),
('B','2018/06',2.5),
('C','2018/06',10.98),
('C','2018/06',20.45);

答案:
----------------------------------------------------------------------------------------------
select A.username,A.month,max(A.salary) as salary,sum(B.salary) as accumulate
from 
(select username,month,sum(salary) as salary from t_user group by username,month) A 
inner join 
(select username,month,sum(salary) as salary from t_user group by username,month) B
on
A.username=B.username
where B.month <= A.month
group by A.username,A.month
order by A.username,A.month;
-----------------------------------------------------------------------------------------------

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅夏初雨yan

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值