SELECT author,month,ROUND(fans_growth_cnt/play_cnt,3) AS fans_growth_rate,SUM(fans_growth_cnt) OVER (PARTITION BY author ORDER BY month) as total_fans FROM (SELECT author,DATE_FORMAT(start_time,"%Y-%m") as month,SUM(IF(if_follow=2,-1,if_follow)) AS fans_growth_cnt,COUNT(1) AS play_cnt FROM tb_user_video_log JOIN tb_video_info USING(video_id) WHERE YEAR(start_time)=2021 GROUP BY author,month) as t ORDER BY author,total_fans;
1.子查询和主查询
限制性内层子查询再执行主查询,FROM中的子查询各列名称不一定与主查询各列名称完全一样,但个数和内在逻辑必须对应一致。
并且不要忘记给子查询编辑别名
聚合函数COUNT在分组后是只计算某一组的个数,因此不用再限定COUNT计数的对象
2.DATE_FORMAT(start_time,"%Y-%m") 函数
DATE_FORMAT(start_time, "%Y-%m") 是 MySQL 中用于将日期或时间戳格式化为指定字符串的函数。以下是详细解释:
(1)函数作用 将日期 / 时间戳转换为自定义格式的字符串。 常用于报表生成、数据展示或需要特定日期格式的场景。
(2)语法结构 DATE_FORMAT(date, format)
date:要格式化的日期或时间戳字段(如 start_time)。
format:目标字符串格式,使用特定的格式符号(如 %Y、%m)。
3. 关键格式符号符号
含义 示例
%Y 4 位年份 2023
%y 2 位年份 23
%m 2 位数字月份(01-12) 01 至 12
%c 数字月份(1-12) 1 至 12
%M 月份名称(如 January) January
%b 月份缩写(如 Jan) Jan
%d 2 位日期(01-31) 01 至 31
%H 24 小时制小时(00-23) 00 至 23
%h 12 小时制小时(01-12) 01 至 12
%i 分钟(00-59) 00 至 59
%s 秒(00-59) 00 至 59
4.作答思路
首先创建子查询,将需要的基本量计算出来,并设定好各种条件,在主查询中使用。

京公网安备 11010502036488号