WITH t1 AS (
SELECT tv.author,
SUBSTR(start_time,1,7) AS month,
CASE WHEN if_follow = 0 then 0
WHEN if_follow = 1 then 1
WHEN if_follow = 2 then -1
END AS fens,
COUNT(author) OVER (PARTITION BY author,SUBSTR(start_time,1,7)) AS bofangliang
FROM tb_user_video_log tu
LEFT JOIN tb_video_info tv
ON tu.video_id = tv.video_id
WHERE SUBSTR(start_time,1,4) = '2021'
ORDER BY month ASC
),
t2 AS (
SELECT author,
month,
ROUND(sum(fens) / bofangliang,3) AS fans_growth_rate,
SUM(fens) fans_month
FROM t1
GROUP BY author, month
),
t3 AS (
SELECT
author,
month,
fans_growth_rate,
sum(fans_month) OVER (PARTITION BY author ORDER BY author,month ROWS UNBOUNDED PRECEDING) AS total_fans
FROM t2
)
SELECT * FROM t3
ORDER BY author ASC,total_fans ASC;
# 关键在于自定义窗口函数的 PARTITION BY author