在AVG之前进行大于100的条件转换

平均播放进度大于60%的视频类别

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

此题坑点有两个:

1、原题要求的【当播放时长大于视频时长时,播放进度均记为100%】,是在计算【各类视频,每次播放进度】时需要进行的操作;

2、【计算各类视频的平均播放进度,将进度大于60%的类别输出】是针对最后的结果,即平均播放进度进行大于60%的筛选。

步骤拆解:

  1. 计算各类视频的所有播放进度play_duration;

  2. 计算play_progess, play_duration大于duration的全部处理为100。按tag聚合,计算avg_play_progess, 筛选>60的记录;

  3. 对avg_play_progess四舍五入到两位小数,最后添加百分号,并排序。

代码如下:

WITH t1 AS(
  SELECT
    tag,
    video_id,
    duration,
    TIMESTAMPDIFF(second, start_time, end_time) play_duration
  FROM tb_video_info
  LEFT JOIN tb_user_video_log USING(video_id)
),

t2 AS(
  SELECT 
    tag,
    AVG(IF(play_duration > duration, 1, play_duration / duration) * 100) avg_play_progress
  FROM t1
  LEFT JOIN tb_user_video_log USING(video_id)
  GROUP BY 1
  HAVING avg_play_progress > 60
)

SELECT
  tag,
  CONCAT(ROUND(avg_play_progress, 2), '%') avg_play_progress
FROM t2
ORDER BY 2 desc

全部评论
emmm觉得读起来有点累
点赞 回复 分享
发布于 2022-03-21 16:56

相关推荐

05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
评论
25
1
分享

创作者周榜

更多
牛客网
牛客企业服务