题解 | #国庆期间每类视频点赞量和转发量#
国庆期间每类视频点赞量和转发量
https://www.nowcoder.com/practice/f90ce4ee521f400db741486209914a11?tpId=268&tqId=2285070&ru=/exam/company&qru=/ta/sql-factory-interview/question-ranking&sourceUrl=%2Fexam%2Fcompany
方法一:
WITH t1 AS (
SELECT tag,DATE_FORMAT(start_time,'%Y-%m-%d') dt,
SUM(SUM(if_like))OVER(PARTITION BY tag ORDER BY DATE_FORMAT(start_time,'%Y-%m-%d') rows 6 preceding) AS sum_like_cnt_7d ,
MAX(SUM(if_retweet))OVER(PARTITION BY tag ORDER BY DATE_FORMAT(start_time,'%Y-%m-%d') rows 6 preceding) AS max_retweet_cnt_7d
FROM tb_user_video_log JOIN tb_video_info USING(video_id)
WHERE DATEDIFF('2021-10-03',DATE_FORMAT(start_time,'%Y-%m-%d'))<9
GROUP BY dt,tag
)
SELECT * FROM t1 WHERE dt BETWEEN '2021-10-01' AND '2021-10-03' ORDER BY tag DESC,dt ASC;
方法二:
select tag,dt,sum_like_cnt_7d,max_retweet_cnt_7d
from
(select tag,dt,
sum(like_cnt) over (partition by tag order by dt rows 6 preceding) as sum_like_cnt_7d,
max(retweet_cnt) over (partition by tag order by dt rows 6 preceding) as max_retweet_cnt_7d
from (
select b.tag,DATE_FORMAT(a.start_time,'%Y-%m-%d') as dt,
sum(a.if_like) as like_cnt,
sum(a.if_retweet) as retweet_cnt
from tb_user_video_log a
join tb_video_info b
on a.video_id=b.video_id
WHERE DATEDIFF('2021-10-03',DATE_FORMAT(start_time,'%Y-%m-%d'))<9
group by tag,dt
order by tag,dt
) tt
order by tag desc,dt asc)aa
where dt between '2021-10-01' and '2021-10-03'
