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

牛客直播各科目出勤率

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

  • 这个题主要是要理清楚他连接表格的逻辑,即谁在前谁在后,我在这个地方就想了很久,后面想出来了但是代码不够简洁,然后看了别人的题解茅塞顿开,看来代码还是不够熟练,自己在workbench上面敲得代码运行出来了,但是放在牛客网运行不出来,也找不到原因(哭唧唧),下面第一个代码是参考别人的简洁代码写出来的,真的很6啦,第二个代码是自己写的,在workbench上面敲得代码运行出来了,但是放在牛客网运行不出来。
select 
	a.course_id,
    c.course_name,
    round((count(distinct case when timestampdiff(minute,in_datetime,out_datetime)>=10 then a.user_id else null end)/count(distinct case when if_sign=1 then a.user_id else null end))*100,2) as 'attend_rate(%)'
from behavior_tb a
left join attend_tb b
on a.user_id=b.user_id and a.course_id=b.course_id
left join course_tb c
on a.course_id=c.course_id
group by a.course_id,c.course_name
order by a.course_id

with t as (select
	*,
	sum(if_sign) over (partition by course_id) as renhsu
from 
 behavior_tb
 where if_sign=1)
 
 select
	course_id,
    course_name,
    round((count(distinct user_id)/renhsu)*100,2) as 'attend_rate(%)'
from
(select 
	*,
    timestampdiff(minute,in_datetime,out_datetime) as diff
from
 (select
	user_id,
    t1.course_id,
in_datetime,
out_datetime,
course_name,
renhsu
from
(select
    t.user_id,
	t.course_id,
    in_datetime,
    out_datetime,
    renhsu
from  t 
left join attend_tb atb
on t.course_id=atb.course_id and t.user_id=atb.user_id)t1
left join  course_tb
using(course_id))t2
where  timestampdiff(minute,in_datetime,out_datetime)>=10)t3
group by course_id
order by course_id
 
 


全部评论

相关推荐

06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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