题解 | #每类视频近一个月的转发量/率#

每类视频近一个月的转发量/率

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

select 
tag,
sum(if_retweet),
round(sum(if_retweet) / count(1),3)
from tb_user_video_log log
left join tb_video_info info 
on log.video_id = info.video_id
where datediff(
    (select max(start_time) from tb_user_video_log), start_time
) <= 29
group by 1
order by 2 desc

  1. SELECT 子句 tag: 选择视频的标签。 sum(if_retweet): 计算每个标签的转发总次数 (if_retweet 的总和)。 round(sum(if_retweet) / count(1), 3): 计算转发占比,并四舍五入到小数点后三位。
  2. sum(if_retweet) / count(1) 的解释 sum(if_retweet): 计算每个标签下被转发的次数总和。假设 if_retweet 是一个二进制字段,1 表示该视频被转发,0 表示未转发。 count(1): 计算每个标签的总记录数,即这个标签下所有视频的总数。这里的 count(1) 等价于 count(*),表示计数当前分组中的所有行。 sum(if_retweet) / count(1): 表示每个标签下被转发的次数占该标签总视频数的比例。它计算了在该标签下的视频被转发的比率,或称为转发率。
  3. FROM tb_user_video_log log 从 tb_user_video_log 表中选择数据,这个表可能存储用户的视频观看记录。
  4. LEFT JOIN tb_video_info info ON log.video_id = info.video_id 对 tb_user_video_log 和 tb_video_info 表进行左连接,连接条件是 video_id 相同。tb_video_info 可能存储了视频的元数据,如标签信息等。
  5. WHERE 子句 datediff((select max(start_time) from tb_user_video_log), start_time) <= 29: datediff 函数计算两个日期之间的天数差。 这个条件筛选出最近一个月内的记录,具体来说是从 tb_user_video_log 表中找出距离最新记录的时间在 29 天内(不含第30天)的所有数据。
  6. GROUP BY 1 对查询结果按照第一个选择的字段(即 tag)进行分组,计算每个标签的转发总次数和转发率。
  7. ORDER BY 2 DESC 最后,对分组后的结果按第二列 (sum(if_retweet),即转发总次数) 进行降序排列,确保转发次数最多的标签排在最前面。 总结 这段 SQL 代码的作用是:在最近一个月内,根据视频标签计算转发次数的总和,以及每个标签的转发率,并按转发次数从高到低排序。sum(if_retweet) / count(1) 表示在每个标签下的视频中,被转发的比例,即转发率。
#SQL学习打卡##sql##sql练习日常#
全部评论

相关推荐

04-13 18:10
门头沟学院 Java
dawn___:以后只用老年机
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务