• 【牛客刷题-SQL大厂面试真题】NO6.牛客直播课分析(在线教育行业)


    在这里插入图片描述

    在这里插入图片描述

    🐴 SQL180 某宝店铺的SPU数量

    🚀 建表语句

    drop table if exists course_tb;
    CREATE TABLE course_tb(
    course_id int(10) NOT NULL, 
    course_name char(10) NOT NULL,
    course_datetime char(30) NOT NULL);
    
    INSERT INTO course_tb VALUES(1, 'Python', '2021-12-1 19:00-21:00');
    INSERT INTO course_tb VALUES(2, 'SQL', '2021-12-2 19:00-21:00');
    INSERT INTO course_tb VALUES(3, 'R', '2021-12-3 19:00-21:00');
    
    drop table if exists behavior_tb;
    CREATE TABLE behavior_tb(
    user_id int(10) NOT NULL, 
    if_vw int(10) NOT NULL,
    if_fav int(10) NOT NULL,
    if_sign int(10) NOT NULL,
    course_id int(10) NOT NULL);
    
    INSERT INTO behavior_tb VALUES(100, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(100, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(100, 1, 1, 1, 3);
    INSERT INTO behavior_tb VALUES(101, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(101, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(101, 1, 0, 0, 3);
    INSERT INTO behavior_tb VALUES(102, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(102, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(102, 1, 1, 1, 3);
    INSERT INTO behavior_tb VALUES(103, 1, 1, 0, 1);
    INSERT INTO behavior_tb VALUES(103, 1, 0, 0, 2);
    INSERT INTO behavior_tb VALUES(103, 1, 0, 0, 3);
    INSERT INTO behavior_tb VALUES(104, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(104, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(104, 1, 1, 0, 3);
    INSERT INTO behavior_tb VALUES(105, 1, 0, 0, 1);
    INSERT INTO behavior_tb VALUES(106, 1, 0, 0, 1);
    INSERT INTO behavior_tb VALUES(107, 1, 0, 0, 1);
    INSERT INTO behavior_tb VALUES(107, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(108, 1, 1, 1, 3);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    📖 需求

    请你统计每个科目的转换率(sign_rate(%),转化率=报名人数/浏览人数,结果保留两位小数)。
    注:按照course_id升序排序。
    
    • 1
    • 2

    🍌🍌 答案

    select a.course_id,
           b.course_name,
           round(sum(if_sign)/sum(if_vw)*100,2) `sign_rate(%)`
    from behavior_tb a
    left join course_tb b
    on a.course_id = b.course_id
    group by a.course_id , b.course_name
    order by a.course_id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    🐴 SQL186 牛客直播开始时各直播间在线人数

    🚀 建表语句

    CREATE TABLE course_tb(
    course_id int(10) NOT NULL, 
    course_name char(10) NOT NULL,
    course_datetime char(30) NOT NULL);
    INSERT INTO course_tb VALUES(1, 'Python', '2021-12-1 19:00-21:00');
    INSERT INTO course_tb VALUES(2, 'SQL', '2021-12-2 19:00-21:00');
    INSERT INTO course_tb VALUES(3, 'R', '2021-12-3 19:00-21:00');
    
    CREATE TABLE attend_tb(
    user_id int(10) NOT NULL, 
    course_id int(10) NOT NULL,
    in_datetime datetime NOT NULL,
    out_datetime datetime NOT NULL
    );
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:00:00', '2021-12-1 19:28:00');
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:30:00', '2021-12-1 19:53:00');
    INSERT INTO attend_tb VALUES(101, 1, '2021-12-1 19:00:00', '2021-12-1 20:55:00');
    INSERT INTO attend_tb VALUES(102, 1, '2021-12-1 19:00:00', '2021-12-1 19:05:00');
    INSERT INTO attend_tb VALUES(104, 1, '2021-12-1 19:00:00', '2021-12-1 20:59:00');
    INSERT INTO attend_tb VALUES(101, 2, '2021-12-2 19:05:00', '2021-12-2 20:58:00');
    INSERT INTO attend_tb VALUES(102, 2, '2021-12-2 18:55:00', '2021-12-2 21:00:00');
    INSERT INTO attend_tb VALUES(104, 2, '2021-12-2 18:57:00', '2021-12-2 20:56:00');
    INSERT INTO attend_tb VALUES(107, 2, '2021-12-2 19:10:00', '2021-12-2 19:18:00');
    INSERT INTO attend_tb VALUES(100, 3, '2021-12-3 19:01:00', '2021-12-3 21:00:00');
    INSERT INTO attend_tb VALUES(102, 3, '2021-12-3 18:58:00', '2021-12-3 19:05:00');
    INSERT INTO attend_tb VALUES(108, 3, '2021-12-3 19:01:00', '2021-12-3 19:56:00');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    📖 需求

    请你统计直播开始时(19:00),各科目的在线人数,以上例子的输出结果为(按照course_id升序排序)
    
    • 1

    🍌🍌 答案

    select 
    c.course_id,
    c.course_name,
    count(distinct user_id) asonline_num
    from course_tb c
    join attend_tb a using (course_id)
    where time(in_datetime)<='19:00:00'
        and time(out_datetime)>='19:00:00'
    group by c.course_id,c.course_name
    order by c.course_id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    🐴 SQL187 牛客直播各科目平均观看时长

    drop table if exists course_tb;
    CREATE TABLE course_tb(
    course_id int(10) NOT NULL, 
    course_name char(10) NOT NULL,
    course_datetime char(30) NOT NULL);
    
    INSERT INTO course_tb VALUES(1, 'Python', '2021-12-1 19:00-21:00');
    INSERT INTO course_tb VALUES(2, 'SQL', '2021-12-2 19:00-21:00');
    INSERT INTO course_tb VALUES(3, 'R', '2021-12-3 19:00-21:00');
    
    drop table if exists attend_tb;
    CREATE TABLE attend_tb(
    user_id int(10) NOT NULL, 
    course_id int(10) NOT NULL,
    in_datetime datetime NOT NULL,
    out_datetime datetime NOT NULL
    );
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:00:00', '2021-12-1 19:28:00');
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:30:00', '2021-12-1 19:53:00');
    INSERT INTO attend_tb VALUES(101, 1, '2021-12-1 19:00:00', '2021-12-1 20:55:00');
    INSERT INTO attend_tb VALUES(102, 1, '2021-12-1 19:00:00', '2021-12-1 19:05:00');
    INSERT INTO attend_tb VALUES(104, 1, '2021-12-1 19:00:00', '2021-12-1 20:59:00');
    INSERT INTO attend_tb VALUES(101, 2, '2021-12-2 19:05:00', '2021-12-2 20:58:00');
    INSERT INTO attend_tb VALUES(102, 2, '2021-12-2 18:55:00', '2021-12-2 21:00:00');
    INSERT INTO attend_tb VALUES(104, 2, '2021-12-2 18:57:00', '2021-12-2 20:56:00');
    INSERT INTO attend_tb VALUES(107, 2, '2021-12-2 19:10:00', '2021-12-2 19:18:00');
    INSERT INTO attend_tb VALUES(100, 3, '2021-12-3 19:01:00', '2021-12-3 21:00:00');
    INSERT INTO attend_tb VALUES(102, 3, '2021-12-3 18:58:00', '2021-12-3 19:05:00');
    INSERT INTO attend_tb VALUES(108, 3, '2021-12-3 19:01:00', '2021-12-3 19:56:00');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    📖 需求

    请你统计每个科目的平均观看时长(观看时长定义为离开直播间的时间与进入直播间的时间之差,单位是分钟),
    输出结果按平均观看时长降序排序,结果保留两位小数。
    
    • 1
    • 2

    '🍌🍌 答案

    select c.course_name,
           round(avg(TIMESTAMPDIFF(minute,a.in_datetime,a.out_datetime)),2) avg_len
    from course_tb c left join attend_tb a using(course_id)
    group by c.course_name
    order by avg_len desc
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    🐴 SQL188 牛客直播各科目出勤率

    🚀 建表语句

    drop table if exists course_tb;
    CREATE TABLE course_tb(
    course_id int(10) NOT NULL, 
    course_name char(10) NOT NULL,
    course_datetime char(30) NOT NULL);
    
    INSERT INTO course_tb VALUES(1, 'Python', '2021-12-1 19:00-21:00');
    INSERT INTO course_tb VALUES(2, 'SQL', '2021-12-2 19:00-21:00');
    INSERT INTO course_tb VALUES(3, 'R', '2021-12-3 19:00-21:00');
    
    drop table if exists behavior_tb;
    CREATE TABLE behavior_tb(
    user_id int(10) NOT NULL, 
    if_vw int(10) NOT NULL,
    if_fav int(10) NOT NULL,
    if_sign int(10) NOT NULL,
    course_id int(10) NOT NULL);
    
    INSERT INTO behavior_tb VALUES(100, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(100, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(100, 1, 1, 1, 3);
    INSERT INTO behavior_tb VALUES(101, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(101, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(101, 1, 0, 0, 3);
    INSERT INTO behavior_tb VALUES(102, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(102, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(102, 1, 1, 1, 3);
    INSERT INTO behavior_tb VALUES(103, 1, 1, 0, 1);
    INSERT INTO behavior_tb VALUES(103, 1, 0, 0, 2);
    INSERT INTO behavior_tb VALUES(103, 1, 0, 0, 3);
    INSERT INTO behavior_tb VALUES(104, 1, 1, 1, 1);
    INSERT INTO behavior_tb VALUES(104, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(104, 1, 1, 0, 3);
    INSERT INTO behavior_tb VALUES(105, 1, 0, 0, 1);
    INSERT INTO behavior_tb VALUES(106, 1, 0, 0, 1);
    INSERT INTO behavior_tb VALUES(107, 1, 0, 0, 1);
    INSERT INTO behavior_tb VALUES(107, 1, 1, 1, 2);
    INSERT INTO behavior_tb VALUES(108, 1, 1, 1, 3);
    
    drop table if exists attend_tb;
    CREATE TABLE attend_tb(
    user_id int(10) NOT NULL, 
    course_id int(10) NOT NULL,
    in_datetime datetime NOT NULL,
    out_datetime datetime NOT NULL
    );
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:00:00', '2021-12-1 19:28:00');
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:30:00', '2021-12-1 19:53:00');
    INSERT INTO attend_tb VALUES(101, 1, '2021-12-1 19:00:00', '2021-12-1 20:55:00');
    INSERT INTO attend_tb VALUES(102, 1, '2021-12-1 19:00:00', '2021-12-1 19:05:00');
    INSERT INTO attend_tb VALUES(104, 1, '2021-12-1 19:00:00', '2021-12-1 20:59:00');
    INSERT INTO attend_tb VALUES(101, 2, '2021-12-2 19:05:00', '2021-12-2 20:58:00');
    INSERT INTO attend_tb VALUES(102, 2, '2021-12-2 18:55:00', '2021-12-2 21:00:00');
    INSERT INTO attend_tb VALUES(104, 2, '2021-12-2 18:57:00', '2021-12-2 20:56:00');
    INSERT INTO attend_tb VALUES(107, 2, '2021-12-2 19:10:00', '2021-12-2 19:18:00');
    INSERT INTO attend_tb VALUES(100, 3, '2021-12-3 19:01:00', '2021-12-3 21:00:00');
    INSERT INTO attend_tb VALUES(102, 3, '2021-12-3 18:58:00', '2021-12-3 19:05:00');
    INSERT INTO attend_tb VALUES(108, 3, '2021-12-3 19:01:00', '2021-12-3 19:56:00');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    📖 需求

    请你统计每个科目的出勤率(attend_rate(%),结果保留两位小数),
    出勤率=出勤(在线时长10分钟及以上)人数 / 报名人数,输出结果按course_id升序排序,以上数据的输出结果如下:
    
    • 1
    • 2

    '🍌🍌 答案

    select c.course_id, course_name, 
    round(count(distinct if(TIMESTAMPDIFF(second,in_datetime,out_datetime) >= 600, a.user_id, null))/ count(distinct if(if_sign=1,b.user_id,null))*100,2)
    from attend_tb a right join behavior_tb b
    on a.user_id = b.user_id and a.course_id = b.course_id
    join course_tb c
    on b.course_id = c.course_id
    group by c.course_id, course_name
    order by c.course_id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    🐴 SQL189 牛客直播各科目同时在线人数

    🚀 建表语句

    drop table if exists course_tb;
    CREATE TABLE course_tb(
    course_id int(10) NOT NULL, 
    course_name char(10) NOT NULL,
    course_datetime char(30) NOT NULL);
    INSERT INTO course_tb VALUES(1, 'Python', '2021-12-1 19:00-21:00');
    INSERT INTO course_tb VALUES(2, 'SQL', '2021-12-2 19:00-21:00');
    INSERT INTO course_tb VALUES(3, 'R', '2021-12-3 19:00-21:00');
    
    drop table if exists attend_tb;
    CREATE TABLE attend_tb(
    user_id int(10) NOT NULL, 
    course_id int(10) NOT NULL,
    in_datetime datetime NOT NULL,
    out_datetime datetime NOT NULL
    );
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:00:00', '2021-12-1 19:28:00');
    INSERT INTO attend_tb VALUES(100, 1, '2021-12-1 19:30:00', '2021-12-1 19:53:00');
    INSERT INTO attend_tb VALUES(101, 1, '2021-12-1 19:00:00', '2021-12-1 20:55:00');
    INSERT INTO attend_tb VALUES(102, 1, '2021-12-1 19:00:00', '2021-12-1 19:05:00');
    INSERT INTO attend_tb VALUES(104, 1, '2021-12-1 19:00:00', '2021-12-1 20:59:00');
    INSERT INTO attend_tb VALUES(101, 2, '2021-12-2 19:05:00', '2021-12-2 20:58:00');
    INSERT INTO attend_tb VALUES(102, 2, '2021-12-2 18:55:00', '2021-12-2 21:00:00');
    INSERT INTO attend_tb VALUES(104, 2, '2021-12-2 18:57:00', '2021-12-2 20:56:00');
    INSERT INTO attend_tb VALUES(107, 2, '2021-12-2 19:10:00', '2021-12-2 19:18:00');
    INSERT INTO attend_tb VALUES(100, 3, '2021-12-3 19:01:00', '2021-12-3 21:00:00');
    INSERT INTO attend_tb VALUES(102, 3, '2021-12-3 18:58:00', '2021-12-3 19:05:00');
    INSERT INTO attend_tb VALUES(108, 3, '2021-12-3 19:01:00', '2021-12-3 19:56:00');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    📖 需求

    请你统计每个科目最大同时在线人数(按course_id排序)
    
    • 1

    🍌🍌 答案

    select ct.course_id,ct.course_name,bt.max_num
    from course_tb ct
    join(
    select course_id,max(at_num) as max_num
    from(
    select*, sum(num)over(partition by course_id order by course_id,at_time) as at_num
    from(
    select user_id,course_id,time(in_datetime) as at_time, 1 num 
    from attend_tb 
    union all
    select user_id,course_id,time(out_datetime) as at_time, -1 num 
    from attend_tb 
    order by course_id,at_time
    ) a
    ) b
    group by course_id
    ) bt
    on ct.course_id=bt.course_id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    上传npm包到私有nexus仓库中《解决服务端安装npm依赖失败的问题》
    `Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig`
    初入Vue(一)
    C语言 —— 初步入门知识(选择与循环语句、函数、数组、操作符、关键字和#define)
    idea软件_启动出错&永久办法&leetcode关联
    DFS - 常见算法题总结
    11988 - Broken Keyboard (a.k.a. Beiju Text) (UVA)
    盘点 | 2022年上半年国内的电邮安全事件
    eggjs controller层调用controller层解决方案
    javascript制作简单的富文本,基本功能都实现,除了上传图片只能用URL
  • 原文地址:https://blog.csdn.net/weixin_41645135/article/details/126186605