题解 | #牛客直播各科目出勤率#

牛客直播各科目出勤率

https://www.nowcoder.com/practice/0cab547df4f0430b93042128f445d899

明确题意:出勤率(在线时长10分钟及以上人数),可以对attend_tb表根据course_id, user_id分组用sum(timestampdiff(minute, begin,end))计算出勤时间(退出再进累计够10分钟也算),统计满足条件的user_id数。

报名人数:behavior_tb这张表一个用户对一门课,不会重复的,因此分母只需统计sum(bt.if_sign)即可得到报名人数。

select ct.course_id, 
    ct.course_name,
    round(100 * count(distinct if(t1.time1 >= 10, bt.user_id, null)) / sum(bt.if_sign), 2) as 'attend_rate(%)'
from course_tb ct
join behavior_tb bt on ct.course_id=bt.course_id
# 此处需要用左连接,因为可能存在用户报名了但是并没有观看的,分母仍然需要记录
left join (
    select user_id, 
        course_id,
        sum(timestampdiff(minute, in_datetime, out_datetime)) as time1
    from attend_tb
    group by user_id, course_id
) t1 on bt.course_id=t1.course_id and bt.user_id=t1.user_id
group by ct.course_id, ct.course_name
order by ct.course_id asc

全部评论

相关推荐

投递拼多多等公司10个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务