阅读 277

MySQL:实现累加求和的功能

MySQL:实现累加求和的功能

1、表结构和表数据

idcompany_idstart_timefinish_timewatch_time
127032020-08-12 21:51:272020-08-12 21:51:32185
227032020-08-12 21:55:212020-08-12 21:55:26640
327032020-08-13 13:59:182020-08-13 13:59:22410
427032020-08-13 14:07:342020-08-13 14:08:34890
527032020-08-13 14:24:592020-08-13 14:25:55205
627032020-08-13 14:38:322020-08-13 14:39:28115
727032020-08-15 14:48:012020-08-15 14:49:00120
827032020-08-16 14:50:162020-08-16 14:51:16300
927032020-08-17 15:00:162020-08-17 15:01:16160
1027032020-08-17 15:08:142020-08-17 15:09:1375

2、需求说明

现在希望得到每天累计的观看时长,即8月12日到8月13日的累计,8月12日到8月15日的累计,以此类推。

3、解决方法

step1: 先按照日期分组聚合求总:

sql

select finish_time, SUM(watch_time) as watch_time from live_results 
where company_id = 2703 GROUP BY DATE_FORMAT(finish_time,'%Y-%m-%d');

结果如图:
分组聚合

分组聚合


step2: 累加

sql

SET @sum := 0;SELECT  DATE_FORMAT(t.finish_time, '%Y-%m-%d') as date, (@sum := @sum + t.watch_time) as day_total from (	select finish_time, SUM(watch_time) as watch_time from live_results 
	where company_id = 2703 GROUP BY DATE_FORMAT(finish_time,'%Y-%m-%d')
) as t;

结果如图:
累加

累加


其中:
SET @sum := 0:@表示自定义一个变量; :=是赋值;即设置了一个变量sum并赋值0。
@sum := @sum + t.watch_time 类似a+=1,即a=a+1的思想,求变量的累加值。

step3: 合并

用 select @sum :=0 查做一个表来初始化变量sum = 0, 然后进行联合查询,这样就并为一个sql写到代码中,结果不变。

sql

SELECT  DATE_FORMAT(t.finish_time, '%Y-%m-%d') as date, (@sum := @sum + t.watch_time) as day_total from (	select finish_time, SUM(watch_time) as watch_time from live_results a, (select @sum :=0) b	where company_id = 2703 GROUP BY DATE_FORMAT(finish_time,'%Y-%m-%d')
) as t;

至此,需求合到实现。


来源https://www.cnblogs.com/luckyliulin/p/14682206.html

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐