题解 | #平均播放进度大于60%的视频类别#
平均播放进度大于60%的视频类别
https://www.nowcoder.com/practice/c60242566ad94bc29959de0cdc6d95ef
select
t1.tag,
## 先将小数乘以100,再利用cast函数转换数据格式,利用decimal设置为两位小数,最后在利用concat函数拼接上百分号
concat(cast(avg(process)*100 as Decimal(16,2)) ,"%") `avg_play_progress`
from
(
select
##选出后面需要的字段
## 以下两个字段推荐提交不用,但是测试最后带一下,好检查问题
tuvl.start_time,
tuvl.end_time,
## 算出该用户这次看某个视频的连续时间(为了和后面视频时间做比较)
unix_timestamp (end_time) - unix_timestamp (start_time) `subtime`,
tvi.duration,
## 计算播放进度(判断是不是超过了视频的时间,如果超过设置为1)
if((unix_timestamp (end_time) - unix_timestamp (start_time))/tvi.duration>1,1,(unix_timestamp (end_time) - unix_timestamp (start_time))/tvi.duration) `process`,
tvi.tag
from
tb_user_video_log tuvl
## 直接内连接,减少数据量
inner join tb_video_info tvi on tuvl.video_id = tvi.video_id
) t1
## 按照视频分组
group by
t1.tag
having avg(process)>0.6
## 按照视频播放率降序排序
order by avg_play_progress desc
#纯粹的学习分享##求大佬指教#
查看11道真题和解析