各个视频的平均完播率
select v.video_id,
round(avg(case when timestampdiff(second,start_time,end_time)>= duration then 1 else 0 end),3) avg_comp_play_rate
from tb_user_video_log u left join tb_video_info v on v.video_id=u.video_id
where date_format(start_time,'%Y')=2021
and date_format(end_time,'%Y')=2021
group by v.video_id
order by avg_comp_play_rate desc
用到的函数:
- round用法:round(expr, d)
- case when...then...else...end
- date_format()
- avg用法:avg(expr)
- timestampdiff用法:
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
interval:指定时间参数
- year 年
- month 月
- quarter 季度
- week 周
- day 日
- hour 小时
- minute 分钟
- second 秒
备注: 第一次做的时候,以为要经过好多次join,先计算分母(每个id有多少行),然后计算分子(完整看完的),然后分子分母再要join起来计算。 但是发现可以用case when语句完美解决我的困扰。牛~