某音短视频
各个视频的平均完播率
题目 :

Q : 如何计算两个列的差值
A : 使用 TIMESTAMPDIFF(unit, start_time, end_tiem) 或者是 使用 DATEDIFF(end_date, start_time)
- 如果使用
DATEDIFF返回的是 相差的天数 - 对于使用
TIMESTAMPDIFF可以使用下列枚举值SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,YEAR
思路 :
- 我们需要计算出单条的完播率
TIMESTAMPDIFF() / duration - 然后需要统计出一个视频的完播率
SUM ( TIMESTAMPDIFF() / duration ) / count(tb_user_video_log) - 由于我们需要计算的
duration在另外一张表, 所以我们可以考虑将video_info表的信息left join到我们的video_log表中 - 另外我们需要注意的是 这个题目只需要处理
2021的数据, 也就是我们只需要join到where year = 2021的数据
|
|
平均播放进度大于60%的视频类别
题目 :

Q : 如何展示百分比
A : 我们可以使用 CONTRACT(value , _suffix) 的形式加上 %
坑点 : 可能用户会超播, 导致计算的数超过 100%
A : 我们这里需要使用 LEAST(value , limit_value) 而不是 MIN(A,B) , MIN 函数在 SQL 中是一个聚合函数, 我们应该使用 LEAST
思路 :
- 同样我们需要计算单个条的播放率
LEAST( TIMESTAMPDIFF , DURATION ) , DURATION - 然后我们需要计算单个视频的播放率
LEAST( ... ) / DURATION - 由于这里输出的结果是
TAG那么我们考虑先根据vedio_id分组, 分组后 再聚合video_info的信息 重新查一遍
|
|