题解 | #国庆期间每类视频点赞量和转发量#
国庆期间每类视频点赞量和转发量
http://www.nowcoder.com/practice/f90ce4ee521f400db741486209914a11
【问题解读】国庆前三天每类视频近一周内的点赞量以及一周内最大当天转发数量
- 国庆前三天每类视频表明分组条件为天和视频类别
- 近一周内表明统计周期
【难点分析】如何统计当天过往一周内的数据,我们可以轻松得到每天每类视频的数据,但如何同时将过往一周内的数据统计出来是一个难点。
【解决办法】我们可以利用自连接,将每天每类视频的数据自连接,然后添加一个筛选条件,这需要我们创建两个临时表,代码逻辑如下所示:
SELECT
A.tag,
A.day,
SUM(B.like_day) AS sum_like_cnt_7d,
MAX(B.retweet_day) AS max_retweet_day
FROM
(SELECT
tag,
DATE_FORMAT(start_time,'%Y-%m-%d') DAY,
SUM(if_like) AS like_day,
SUM(if_retweet) AS retweet_day
FROM tb_user_video_log t1
JOIN tb_video_info t2
ON t1.video_id = t2.video_id
WHERE DATEDIFF(DATE_FORMAT(start_time,'%y-%m-%d'),'2021-10-01') BETWEEN 0 AND 2
GROUP BY tag,DATE_FORMAT(start_time,'%Y-%m-%d')
) A
JOIN
(SELECT
tag,
DATE_FORMAT(start_time,'%Y-%m-%d') DAY,
SUM(if_like) AS like_day,
SUM(if_retweet) AS retweet_day
FROM tb_user_video_log t1
JOIN tb_video_info t2
ON t1.video_id = t2.video_id
GROUP BY tag,DATE_FORMAT(start_time,'%Y-%m-%d')
) B
ON A.tag = B.tag
WHERE DATEDIFF(A.day,B.day) BETWEEN 0 AND 6
GROUP BY A.day,A.tag