mysql中点击统计日排行

采用mysql 5.6

业务需求:

1、管理员上传视频,然后用户进行视频观看,统计用户点击视频的次数,进行日排行排序

表设计:

CREATE TABLE `v_video_play_log` (
  `id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'id',
  `VideoId` bigint(20) DEFAULT NULL COMMENT '视频id',
  `memberId` bigint(20) DEFAULT NULL COMMENT '会员id',
  `ip` varchar(128) DEFAULT NULL COMMENT '观看人ip',
  `lookTime` datetime DEFAULT NULL COMMENT '点击观看时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='视频点播记录表';


插入模拟数据:

INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('1', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('2', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('3', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('4', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('5', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('6', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:25:25');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('7', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:26:04');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('8', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:29:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('9', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('11', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:31:11');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('12', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:31:14');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('13', '3', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:31:49');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('20', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-21 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('21', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-26 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000057990010', '1', '12001002', '0:0:0:0:0:0:0:1', '2017-12-20 11:14:59');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058690001', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 13:41:25');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700000', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 13:54:23');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700001', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:14:27');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700002', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:14:31');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700003', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:14:35');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700004', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:14:38');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700005', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:14:42');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700006', '1', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:15:04');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700007', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:15:22');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700008', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:15:26');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700009', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:15:28');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700010', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:15:32');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058700011', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 14:15:35');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058720000', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:25:25');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058720002', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:26:04');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058730000', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-23 17:29:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058740000', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058740002', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058740004', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058740006', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058740007', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-11-01 17:31:06');
INSERT INTO `video_gz_wmh`.`v_video_play_log` (`id`, `VideoId`, `memberId`, `ip`, `lookTime`) VALUES ('10000058740008', '2', '12001004', '0:0:0:0:0:0:0:1', '2017-12-20 17:31:06');




sql实现:

-- 总查询括号出来,方便order by 排序
SELECT *
	FROM (
	SELECT 
   -- 通过case方法判断,变量日期@pre_lookTime,是否等于上一个日期,一样的话,则数字序号加1,不一样,则需要从1开始
		@i := 
		CASE 
			WHEN 
				@pre_lookTime = a.lookTime 
				THEN 
					-- 通过case嵌套方法判断,变量点击数@pre_num,是否等于上一个点击数,一样的话,则并列排名,不一样,则数字序号加1
						CASE 
							WHEN @pre_num = a.clickNum 
							THEN @i 
							ELSE @i + 1 
							END 
				ELSE 1 
				END AS rownum, 
	    -- 将变量@pre_lookTime 等于上一条数据日期(即,根据sql查询的顺序赋值,变量等于当条数据的值,在下一条数据时,就等于上条数据的值)
				@pre_lookTime := a.lookTime AS prelookTime,
			-- 将变量@pre_lookTime 等于上一条数据号码
				@pre_num := a.clickNum AS preclickNum,
				a.*
				FROM (
			-- 将时间转换成yyyymmdd格式,进行分组排序,按日期排序
				SELECT COUNT(lo.id) AS clickNum, lo.id, lo.VideoId, lo.memberId, lo.ip
				, looklo.lookTime
				FROM v_video_play_log lo, (SELECT DATE_FORMAT(lookTime, '%Y%m%d') AS lookTime, id
				FROM v_video_play_log
				) looklo
		WHERE lo.id = looklo.id
		GROUP BY looklo.lookTime, VideoId
		ORDER BY looklo.lookTime DESC, COUNT(lo.id) DESC
		) a,
	-- 查询一个变量@i,赋值0,变量@pre_lookTime,赋值null,变量 @pre_num ,赋值0
	(SELECT @i := 0, @pre_lookTime := NULL, @pre_num := 0
		) b
	) c
ORDER BY looktime DESC;








sql添加序号参考文章:https://www.cnblogs.com/CharlieLau/p/6737243.html,感谢大神

发布了19 篇原创文章 · 获赞 5 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_42165041/article/details/80242803