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

如下的用户访问数据

userId visitDate visitCount
u01    2017-01-21    5    1
u01    2017-01-23    6    2
u02    2017-01-23    6    3
u03    2017-01-22    8    4
u04    2017-01-20    3    5
u02    2017-02-21    8    6
u01    2017-02-22    4    7
u01    2017-02-23    5    8
要求使用SQL统计出每个用户的累积访问次数,如下表所示:
用户id 月份 小计 累积
u01    2017-01    11    11
u02    2017-01    6    6
u03    2017-01    8    8
u04    2017-01    3    3
u02    2017-02    8    14
u01    2017-02    9    20

做sql题首先要理清思路
这个题目的要查的是 用户id 月份 小计 累积
(1.用户id好说可以可以直接拿到
(2.月份 给的数据是年月日我们要自己转成年月类型的
(3.小计 就是按用户id和月份进行分类后的访问次数的和
(4.累积 是按月份 将前面的小计求和(麻烦)

准备数据:

CREATE TABLE `count_user_visit` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` char(5) COLLATE utf8_bin NOT NULL,
  `visit_date` date DEFAULT NULL,
  `visit_count` int(9) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (1, 'u01', '2017-01-21', 5);
INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (2, 'u01', '2017-01-23', 6);
INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (3, 'u02', '2017-01-23', 6);
INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (4, 'u03', '2017-01-22', 8);
INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (5, 'u04', '2017-01-20', 3);
INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (6, 'u02', '2017-02-21', 8);
INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (7, 'u01', '2017-02-22', 4);
INSERT INTO `lls_test`.`count_user_visit`(`id`, `user_id`, `visit_date`, `visit_count`) VALUES (8, 'u01', '2017-02-23', 5);



查出小计: 

SELECT
	user_id,
	visit_count,
	Date_format( visit_date, '%Y-%m' ) yue 
FROM
	count_user_visit;
	
SELECT
	a.user_id 用户 id,
	a.yue 月份,
	sum( visit_count ) 小计 
FROM
	( SELECT user_id, visit_count, Date_format( visit_date, '%Y-%m' ) yue FROM count_user_visit ) a 
GROUP BY
	a.user_id,
	a.yue;
	

查出累积: 

SELECT
	a.user_id 用户id,
	a.yue 月份,
	sum( visit_count ) 小计,
	(
SELECT
	SUM( b.小计 ) 
FROM
	(
SELECT
	a.id 用户id,
	a.yue 月份,
	SUM( vc ) 小计 
FROM
	( SELECT user_id id, visit_count vc, DATE_FORMAT( visit_date, '%Y-%m' ) yue FROM count_user_visit ) a 
GROUP BY
	a.id,
	a.yue 
	) b 
WHERE
	b.月份<= a.yue 
	AND b.用户id = a.user_id 
	) 累积 
FROM
	( SELECT user_id, visit_count, Date_format( visit_date, '%Y-%m' ) yue FROM count_user_visit ) a 
GROUP BY
	a.user_id,
	a.yue;


 

你可能感兴趣的:(mysql)