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

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

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

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

明确题意:

计算每类视频在有用户互动的最近一个月(按包含当天在内的近30天算)中的转发量和转发率。结果按转发率降序排序


问题分解:

  • 关联用户-视频互动记录和短视频信息表:JOIN tb_video_info USING(video_id);
  • 筛选最近30天的记录:
    • 找到今天的日期:MAX(DATE(start_time)
    • 往过去推移30天:DATE_SUB(MAX(DATE(start_time)), INTERVAL 30 DAY)
    • 筛选最近的:WHERE DATE(start_time) > (SELECT DATE_SUB(MAX(DATE(start_time)), INTERVAL 30 DAY) FROM tb_user_video_log)
  • 按视频类别分组:GROUP BY tag
  • 计算每个类别的转发量:SUM(if_retweet)
  • 计算每个类别的转发率(转发率=转发量÷播放量):SUM(if_retweet) / COUNT(1)
  • 保留3位小数:ROUND(x, 3)

细节问题:

  • 表头重命名:as
  • 按转发率倒序排序:ORDER BY retweet_rate DESC;

完整代码:

SELECT tag, SUM(if_retweet) as retweet_cnt,
    ROUND(SUM(if_retweet) / COUNT(1), 3) as retweet_rate
FROM tb_user_video_log
JOIN tb_video_info USING(video_id)
WHERE DATE(start_time) > (
    SELECT DATE_SUB(MAX(DATE(start_time)), INTERVAL 30 DAY)
    FROM tb_user_video_log
)
GROUP BY tag
ORDER BY retweet_rate DESC;
SQL大厂真题 文章被收录于专栏

大厂真题手把手教你怎么解~

全部评论
大佬你好呀,想请问一下为什么必须要用where来写呀 WHERE DATE(start_time) > ( SELECT DATE_SUB(MAX(DATE(start_time)), INTERVAL 30 DAY) FROM tb_user_video_log )这个,不能直接在GROUP BY 里面用having来限定这个日期时间吗? GROUP BY tag HAVING DATE(start_time) > DATE_SUB(DATE(start_time),interval 30 day) ORDER BY retweet_rate 我写出来一直报错"Unknown column 'start_time' in 'having clause'"
4 回复 分享
发布于 2022-05-23 16:53
之前写的一道题(大厂真题SQL16),是计算包括今天在内的近90天,里面datesub用的是89,用90的话就通过不了。而这里又使用的是interval 30 day,用29又通过不了呢?感谢大佬!
点赞 回复 分享
发布于 2022-03-19 11:11
牛客不能把题目解释得易懂点嘛,我读题半天都不知道他想表达什么,还好看了你的解释;这道题说实话不难,难在题目歧义带偏了各位做题的朋友;
点赞 回复 分享
发布于 2022-03-23 21:21
为啥where里写子查询啊
点赞 回复 分享
发布于 2023-02-27 00:13 江苏
请问大佬们,where后面限制日期不可以用between and吗
点赞 回复 分享
发布于 2024-02-29 21:31 吉林
真的感谢有你!讲解的非常清晰!暴风哭泣
点赞 回复 分享
发布于 2024-04-14 18:18 广东
疑问为什么(select max(start_time) from tb_user_video_log)外面还要再加一个括号的,求解答,是错了还是这里是知识点
点赞 回复 分享
发布于 2024-04-14 18:51 广东
请问usin是内连接吗
点赞 回复 分享
发布于 2024-04-22 15:00 浙江
inner join是内连接,USING是两个表外键相同的时候 连接条件的简单写法
点赞 回复 分享
发布于 2024-07-14 16:32 北京

相关推荐

02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
xxxxOxo:这公司幽默得很,要了简历半天一点动静都没有,过一会就给你发个邮件让你做测试,做完又没后文了,纯溜人
点赞 评论 收藏
分享
评论
76
1
分享

创作者周榜

更多
牛客网
牛客企业服务