题解 | 每个创作者每月的涨粉率及截止当前的总粉丝量
每个创作者每月的涨粉率及截止当前的总粉丝量
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:从最早月份累加到当前月。