题解 | #平均播放进度大于60%的视频类别#

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

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

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

  • 开始想了半天, 代码也写出来了, 但是测试用例死活就是通过不了
select vi.tag,
    concat(round(avg(
    if((vl.end_time - vl.start_time) > vi.duration, 1,  (vl.end_time - vl.start_time)/vi.duration)
    ) * 100, 2), '%') as avg_play_progress
from tb_user_video_log vl
join tb_video_info vi on vl.video_id=vi.video_id
group by vi.tag
having avg(
    if((vl.end_time - vl.start_time) > vi.duration, 1,  (vl.end_time - vl.start_time)/vi.duration)
    ) > 0.6
order by avg_play_progress desc

  • 这样的到的测试用例死活过不去, 但是逻辑上又是完全没问题的

换成timestampdiff后, 直接就通过了, 求万能的牛友解惑.

关于上代码vl.end_time - vl.start_time我测试过, 是可以正常相减的

select vi.tag,
    concat(round(avg(
    if(timestampdiff(second, vl.start_time, vl.end_time) > vi.duration, 1,  timestampdiff(second, vl.start_time, vl.end_time) / vi.duration)
    ) * 100, 2), '%') as avg_play_progress
from tb_user_video_log vl
join tb_video_info vi on vl.video_id=vi.video_id
group by vi.tag
having avg(
    if(timestampdiff(second, vl.start_time, vl.end_time) > vi.duration, 1,  timestampdiff(second, vl.start_time, vl.end_time) / vi.duration)
    ) > 0.6
order by avg_play_progress desc
全部评论
如果两个字段都为Datetime类型,如果两个时间都在同一天,相减可以得到相差的秒数,但如果跨天,月,年都有问题。找到问题了
1 回复 分享
发布于 2022-06-09 23:21
同问,好奇怪
点赞 回复 分享
发布于 2024-03-07 18:09 北京
题目中的时间也没有跨天啊,怎么回事啊
点赞 回复 分享
发布于 2023-02-02 22:50 上海

相关推荐

不愿透露姓名的神秘牛友
06-30 18:19
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
评论
12
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务