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

牛客直播各科目出勤率

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

因为这道题我现在的思路跟之前的思路不太一样,而且答案提交正确,所以来记录一下。

从题目我们可以知道这道题的关键在于求出出勤人数和报名人数,这里有三张表格,所以不太可能用一个表就写完,肯定是需要进行连接的。

一、求出勤人数

开一个临时表,根据限定条件‘出勤(在线时长10分钟及以上)’在where那里写:

timestampdiff (minute, in_datetime, out_datetime) >= 10

由于之后做出的总表既有course_id,又有course_name,所以我们这里做出的临时表把它们都给取出来,然后就是对得到的限定条件的人数进行去重,把出勤人数求出来:

with
t1 as (
select
course_id,
course_name,
count(distinct user_id) cnt_user
from
course_tb
left join attend_tb using (course_id)
where
timestampdiff (minute, in_datetime, out_datetime) >= 10
group by
1,
2
order by
1
)

二、求出勤人数和报名人数之比

出勤人数刚才已经得到了,就是cnt_user,那么这里需要得到报名人数。报名人数怎么求呢?使用sum函数进行求和即可。

这里我觉得比较灵巧的一点是把刚才得到的表t1和原有的报名表进行连接,不需要再连接其它表了:

select
course_id,
course_name,
round(cnt_user / sum(if_sign) * 100, 2)
from
t1
left join behavior_tb using (course_id)
group by
1,
2
order by
1

#mysql#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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