牛客SQL 大厂面试真题 牛客直播课分析 5套代码及解析

6.牛客直播课分析(在线教育行业)

SQL185 牛客直播转换率

select course_id,
course_name,
round(sum(if_sign)/sum(if_vw)*100,2) as sign_rate
from course_tb
join behavior_tb using(course_id)
group by course_id,course_name
order by course_id

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

select course_id,
course_name,
count(distinct user_id) as online_num
from course_tb
join attend_tb using(course_id)
where time(in_datetime)<='19:00:00'
    and time(out_datetime)>='19:00:00'
group by course_id,course_name
order by course_id

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

  1. 第一次是这么写的,结果发现SQL课程的时间偏小。仔细读题,才发现,这个观看时长定义为离开直播间的时间与进入直播间的时间之差,单位是分钟。我把他定义的时间不超过课程的总时间,是我想多了。。。
select course_name,
round(avg(
    if(timestampdiff(second,in_datetime,out_datetime)/60>120
    ,120,
    timestampdiff(second,in_datetime,out_datetime)/60)
    ),2) as avg_Len
from course_tb
join attend_tb using(course_id)
group by course_name
order by avg_Len desc
  1. 正确答案如下所示:
select course_name,
round(avg(timestampdiff(second,in_datetime,out_datetime)/60),2) as avg_Len
from course_tb
join attend_tb using(course_id)
group by course_name
order by avg_Len desc

SQL188 牛客直播各科目出勤率

  1. 注意: a表和b表连接了两个,user_id,course_id,且因为b表包含a表,所以要用right join。不加right的话,b表中的一部分内容会缺失,答案中的SQL的出勤率输出是错的。
  2. 倒数第三行是 b.course_id=c.course_id ,而不是a.course_id=c.course_id。如果连接了a表而不是b表,那么就会出现类似于提示1中出现的情况,输出的结果是以a表为基准的,b表中有一部分内容会缺失,答案中的SQL的出勤率也会是错的。
select 
c.course_id,
course_name,
round(
count(distinct if(timestampdiff(second,in_datetime,out_datetime)>=600,a.user_id,null))*100
/count(distinct if(if_sign=1,b.user_id,null))
,2) as attend_rate
from attend_tb as a
right join behavior_tb as b on a.user_id=b.user_id and a.course_id=b.course_id
join course_tb as c on b.course_id=c.course_id
group by c.course_id,course_name
order by c.course_id

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

  1. 本题类似于SQL163 每篇文章同一时刻最大在看人数,计算的方法是一样的

  2. 第一步,取用户进入直播间,并赋值uv为1;取用户离开直播间,并赋值uv为-1;
    共有24条记录

  3. 第二步,由于窗口函数中的排序具有累加的效果,所以可以使用窗口函数计算直播间的瞬时用户数;
    在这里插入图片描述

  4. 第三步,取各个科目直播间的瞬时最大值,并按照course_id排序。
    在这里插入图片描述

select 
course_id,
course_name,
max(uv_cnt) as max_num
from (
    select
    course_id,
    course_name,
    sum(uv)over(partition by course_id order by dt,uv desc) uv_cnt
    from (
        select 
        course_id,
        user_id,
        in_datetime as dt,
        1 as uv 
        from attend_tb
        union all
		select 
        course_id,
        user_id,
        out_datetime as dt,
        -1 as uv 
        from attend_tb
        ) as a
    join course_tb using(course_id)
    ) as b
group by course_id,course_name
order by course_id
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023全牛客史上最全MySQL大厂常问面试题合集,是一份总结了许多MySQL常见面试问题的资料。在MySQL作为关系型数据库中的重要一员,业界使用率极高,成为了大厂面试的必考点之一。对于面试者来说,掌握MySQL相关知识无疑是非常重要的。 面对这样一份面试题合集,我们需要掌握MySQL的基本架构、性能优化、存储引擎等方面的知识。首先,我们需要了解MySQL的基本架构,即MySQL架构的三层结构,包括连接处理层、查询处理层和存储引擎层。此外,对于查询语句的优化,我们需要了解索引的使用、查询语句的执行流程等概念,并且掌握MySQL自带的调优工具。 在MySQL性能优化方面,我们可以从硬件、操作系统、MySQL本身以及SQL语句的角度入手。例如,可以从MySQL参数配置、SQL执行计划、SQL调优等方面解决性能问题。同时,由于存储引擎对于MySQL的性能非常关键,我们也需要了解InnoDB和MyISAM这两种主流存储引擎的特点与优缺点,及其在实际应用中的使用情况。 总之,掌握MySQL的基本架构、性能优化、存储引擎等知识是应聘MySQL岗位时不可或缺的必备技能。面对这份全牛客史上最全MySQL大厂常问面试题合集,需要认真学习、反复练习,并对自己的掌握情况进行不断的总结与提高。只有做到这些,才能在面试中展现出自己的实力,获得满意的工作机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值