zoukankan      html  css  js  c++  java
  • 刷题(Mysql) 平均播放进度大于60%的视频类别

    本题出自:牛客网

    难度:简单(某音面试题)

    描述

    用户-视频互动表tb_user_video_log
    (uid-用户ID, video_id-视频ID, start_time-开始观看时间, end_time-结束观看时间, if_follow-是否关注, if_like-是否点赞, if_retweet-是否转发, comment_id-评论ID)
     
     
    短视频信息表tb_video_info
     
    (video_id-视频ID, author-创作者ID, tag-类别标签, duration-视频时长, release_time-发布时间)
     
     
    问题:计算各类视频的平均播放进度,将进度大于60%的类别输出。
     
    注:
    • 播放进度=播放时长÷视频时长*100%,当播放时长大于视频时长时,播放进度均记为100%。
    • 结果保留两位小数,并按播放进度倒序排序。
     
    输出示例:
    示例数据的输出结果如下:
    解释:
    影视类视频2001被用户101、102、103看过,播放进度分别为:30秒(100%)、21秒(70%)、30秒(100%),平均播放进度为90.00%(保留两位小数);
    美食类视频2002被用户102、103看过,播放进度分别为:30秒(50%)、60秒(100%),平均播放进度为75.00%(保留两位小数);

    示例1

    输入:
    DROP TABLE IF EXISTS tb_user_video_log, tb_video_info;
    CREATE TABLE tb_user_video_log (
        id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
        uid INT NOT NULL COMMENT '用户ID',
        video_id INT NOT NULL COMMENT '视频ID',
        start_time datetime COMMENT '开始观看时间',
        end_time datetime COMMENT '结束观看时间',
        if_follow TINYINT COMMENT '是否关注',
        if_like TINYINT COMMENT '是否点赞',
        if_retweet TINYINT COMMENT '是否转发',
        comment_id INT COMMENT '评论ID'
    ) CHARACTER SET utf8 COLLATE utf8_bin;
    
    CREATE TABLE tb_video_info (
        id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
        video_id INT UNIQUE NOT NULL COMMENT '视频ID',
        author INT NOT NULL COMMENT '创作者ID',
        tag VARCHAR(16) NOT NULL COMMENT '类别标签',
        duration INT NOT NULL COMMENT '视频时长(秒数)',
        release_time datetime NOT NULL COMMENT '发布时间'
    )CHARACTER SET utf8 COLLATE utf8_bin;
    
    INSERT INTO tb_user_video_log(uid, video_id, start_time, end_time, if_follow, if_like, if_retweet, comment_id) VALUES
      (101, 2001, '2021-10-01 10:00:00', '2021-10-01 10:00:30', 0, 1, 1, null),
      (102, 2001, '2021-10-01 10:00:00', '2021-10-01 10:00:21', 0, 0, 1, null),
      (103, 2001, '2021-10-01 11:00:50', '2021-10-01 11:01:20', 0, 1, 0, 1732526),
      (102, 2002, '2021-10-01 11:00:00', '2021-10-01 11:00:30', 1, 0, 1, null),
      (103, 2002, '2021-10-01 10:59:05', '2021-10-01 11:00:05', 1, 0, 1, null);
    
    INSERT INTO tb_video_info(video_id, author, tag, duration, release_time) VALUES
      (2001, 901, '影视', 30, '2021-01-01 7:00:00'),
      (2002, 901, '美食', 60, '2021-01-01 7:00:00'),
      (2003, 902, '旅游', 90, '2020-01-01 7:00:00');
    输出:
    影视|90.00%
    美食|75.00%

    本人提交答案(仅供参考):

    select * from (SELECT a.tag,concat(round(avg(if(ROUND(TIMESTAMPDIFF(SECOND,b.start_time,b.end_time)/a.duration*100,2)>100,100,ROUND(TIMESTAMPDIFF(SECOND,b.start_time,b.end_time)/a.duration*100,2))),2),'%') p FROM tb_video_info a left join tb_user_video_log b on a.video_id = b.video_id
    GROUP by a.video_id) q where q.p > 60 ORDER by q.p desc;

      TIMESTAMPDIFF函数,计算时间差,时间小的放在前面,时间大的放在后面,可精确到天(DAY)、小时(HOUR),分钟(MINUTE)和秒(SECOND)。例子:TIMESTAMPDIFF(DAY,start_time,end_time)

      ROUND函数,用于数据四舍五入。例子:ROUND(x,2)     x是处理的数据,2是保留2位小数

      CONCAT函数,连接字符串。例子:CONCAT(str1,str2,...)

      

  • 相关阅读:
    ExtJS小技巧
    Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询
    NPM 私服
    IDEA 不编译java以外的文件
    SQL 引号中的问号在PrepareStatement 中不被看作是占位符
    Chrome 浏览器自动填表呈现淡黄色解决
    批量删除Maven 仓库未下载成功.lastupdate 的文件
    Oracle 11g 监听很慢,由于监听日志文件太大引起的问题(Windows 下)
    Hibernate 自动更新表出错 建表或添加列,提示标识符无效
    Hibernate 自动更新表出错 More than one table found in namespace
  • 原文地址:https://www.cnblogs.com/mingmingming/p/15729957.html
Copyright © 2011-2022 走看看