SQL统计出每个用户的累积访问次数

本文介绍了如何使用SQL统计每个用户的累积访问次数。首先,通过创建用户访问数据表并插入样本数据,然后进行预处理,对用户ID和月份进行分组并求和。接着,利用两种方法计算累积值:一种是通过子查询实现,另一种是使用窗口函数(适用于MySQL8及以上版本)。这两种方法都能有效地计算每个用户的累计访问次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL统计出每个用户的累积访问次数

如下是用户访问数据

在这里插入图片描述

要求使用SQL统计出每个用户的累积访问次数,如下图

在这里插入图片描述

建表和插入数据
#建表
create table user_data(
	user_id varchar(50),
	visit_date date,
	visit_count int
);
###插入数据
insert into user_data values ('u01','2017-01-21',5);
insert into user_data values ('u02','2017-01-23',6);
insert into user_data values ('u03','2017-01-22',8);
insert into user_data values ('u04','2017-01-20',3);
insert into user_data values ('u01','2017-01-23',6);
insert into user_data values ('u01','2017-02-21',8);
insert into user_data values ('u02','2017-01-23',6);
insert into user_data values ('u01','2017-02-22',4);
进行预处理
select 
	user_id,
	date_format(visit_date,'%Y-%m') as date,
	sum(visit_count) as count
from user_data group by user_id,date order by user_id,date;

得到预处理结果(对用户id和月份进行分组,然后求和,在进行排序)
在这里插入图片描述

普通方法进行累积求和

分析:先得到上面的预测表,然后再从预处理表中查询出用户id相同,月份小于等于所需月份的访问次数,进行求和,得到累积值。

select 
	user_id,
	date,
	count,
	(select 
		sum(count) 
	from (select 
			user_id,
			date_format(visit_date,'%Y-%m') as date,
			sum(visit_count) as count
		from user_data group by user_id,date order by user_id,date) t where 
		user_id=t1.user_id and date<=t1.date) as amount
from 
	(select 
		user_id,
		date_format(visit_date,'%Y-%m') as date,
		sum(visit_count) as count
	from user_data group by user_id,date order by user_id,date) as t1;

结果

在这里插入图片描述

使用窗口函数(Mysql 8以上支持)

select 
	user_id,
	date_format(visit_date,'%Y-%m') as date,
	sum(visit_count) as count
    sum(count) over (partition by user_id order by date) as amount 
from
    user_data group by user_id,date order by user_id,date;
该语句未测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坤坤不爱吃鱼

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值