【SQL真题】SQL1: 各个视频的平均完播率 【AVG/SUM/IF/CASE】
题目:
自己思路:
-- 求每个视频的完成播放次数 SELECT a.video_id, ROUND(AVG(IF(TIMESTAMPDIFF(SECOND,start_time,end_time)>=duration,1,0))/COUNT(a.video_id),3) AS avg_comp_play_rate FROM tb_user_video_log a JOIN tb_video_info b ON a.video_id=b.video_id GROUP BY a.video_id -- 求每个视频的总播放次数 # SELECT # video_id, # COUNT(video_id) AS COMPLETE_NUM # FROM tb_user_video_log # GROUP BY video_id
修改后答案:
SELECT a.video_id, ROUND(SUM(IF(TIMESTAMPDIFF(SECOND,start_time,end_time)>=duration,1,0))/COUNT(a.video_id),3) AS avg_comp_play_rate FROM tb_user_video_log a JOIN tb_video_info b ON a.video_id=b.video_id WHERE YEAR(start_time)='2021' AND TIMESTAMPDIFF(SECOND,start_time,end_time)<>0 GROUP BY a.video_id ORDER BY avg_comp_play_rate DESC
参考答案/其他思路1
可以用avg代替指标/总和---计算比率,传递参数指标即可
SELECT a.video_id, ROUND(AVG(IF(TIMESTAMPDIFF(SECOND,start_time,end_time)>=duration,1,0)),3) AS avg_comp_play_rate FROM tb_user_video_log a JOIN tb_video_info b ON a.video_id=b.video_id WHERE YEAR(start_time)='2021' GROUP BY a.video_id ORDER BY avg_comp_play_rate DESC
参考答案/其他思路2
可以用CASE WHEN THEN ELSE END
SELECT a.video_id, ROUND(AVG(CASE WHEN TIMESTAMPDIFF(SECOND,start_time,end_time)>=duration THEN 1 ELSE 0 END),3) AS avg_comp_play_rate FROM tb_user_video_log a JOIN tb_video_info b ON a.video_id=b.video_id WHERE YEAR(start_time)='2021' GROUP BY a.video_id ORDER BY avg_comp_play_rate DESC
本文来自博客园,作者:哥们要飞,转载请注明原文链接:https://www.cnblogs.com/liujinhui/p/16370057.html
分类:
数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2021-06-13 【Java EE】Day12 XML、约束(DTD、Schema)、解析方式、Jsoup、选择器(Selector、XPath)
2021-06-13 【Java EE】Day11 BootStrap、响应式布局、栅格系统、CSS样式、案例