题解 | 每个创作者每月的涨粉率及截止当前的总粉丝量
每个创作者每月的涨粉率及截止当前的总粉丝量
https://www.nowcoder.com/practice/d337c95650f640cca29c85201aecff84
WITH play_info AS( SELECT u.video_id, DATE_FORMAT(u.start_time, "%Y-%m") AS month, u.if_follow, CASE WHEN u.if_follow = 0 THEN 0 WHEN u.if_follow = 1 THEN 1 WHEN u.if_follow = 2 THEN -1 END AS fans, v.author FROM tb_user_video_log u LEFT JOIN tb_video_info v USING (video_id) WHERE YEAR(u.start_time) = 2021 ), monthly_fans AS ( SELECT month, author, SUM(fans) AS month_fans, COUNT(*) AS play_times FROM play_info GROUP BY author, month ) SELECT author, month, ROUND(month_fans / play_times, 3) AS fans_growth_rate, SUM(month_fans) OVER ( PARTITION BY author ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS total_fans -- 截止当月的总粉丝量(累计求和) FROM monthly_fans GROUP BY author, month ORDER BY author, total_fans
这里学到了一个窗口函数的新用法,累计求和:
- ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:从最早月份累加到当前月。