题解 | #每个创作者每月的涨粉率及截止当前的总粉丝量#

每个创作者每月的涨粉率及截止当前的总粉丝量

https://www.nowcoder.com/practice/d337c95650f640cca29c85201aecff84

# SELECT 
#     author,
#     DATE_FORMAT(lo.start_time,'%Y-%m') AS month,
#     ROUND(
#         (SUM(IF(if_follow = '1',1,0)) - SUM(IF(if_follow = '2',1,0)))/
#         COUNT(*) 
#         , 3)AS fans_growth_rate,
#     SUM(IF(if_follow = '1',1,0))AS total_fans
# FROM tb_user_video_log lo
# LEFT JOIN tb_video_info info ON lo.video_id = info.video_id
# WHERE TIMESTAMPDIFF(day,start_time,end_time) <= 30
# GROUP BY author, DATE_FORMAT(lo.start_time,'%Y-%m')
# ORDER BY author,total_fans ASC

SELECT 
    t.author,
    t.month,
    t.fans_growth_rate,
    SUM(month_fans) OVER 
    (PARTITION BY author ORDER BY month) AS total_fans
FROM
(
    SELECT 
    author,
    DATE_FORMAT(start_time,'%Y-%m') AS month,
    ROUND(
        (SUM(IF(if_follow = '1',1,0)) - SUM(IF(if_follow = '2',1,0))) /
        COUNT(*),3) AS fans_growth_rate,
    SUM(IF(if_follow = 1,1,IF(if_follow = 2,-1,0))) AS month_fans
    FROM tb_user_video_log lo
    LEFT JOIN tb_video_info USING(video_id)
    WHERE YEAR(start_time) = 2021
    GROUP BY author,month
)t
ORDER BY author,total_fans
#GROUP BY和窗口函数,聚类违反ONLY_FULL_GROUP_BY
#出现这个错误是因为在启用了 ONLY_FULL_GROUP_BY 的 SQL 模式下,所有 SELECT 子句中的列都需要在 GROUP BY 中明确指定,除非它们是聚合函数的一部分。尽管 if_follow 在窗口函数中使用,它并没有在 GROUP BY 子句中被聚合。

#要解决这个问题,你需要确保你的 SELECT 中的非聚合表达式与 GROUP BY 子句中的列完全对应。此外,fans_growth_rate 的计算应该在一个单独的子查询中完成,以便能够在主查询中使用窗口函数计算 total_fans。

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-20 12:46
瘦嘟嘟右卫门:百度文库网盘的暑期也没约面吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务