题解 | #每个6/7级用户活跃情况#

https://www.nowcoder.com/practice/a32c7c8590324c96950417c57fa6ecd1

思路:根据要返回的结果以及题目意思,由于试卷表和题目表是两张不同的表,两者并没有联系,但是结果既需要返回试卷表的活跃数也需要返回题目表的活跃数,这里我们分别去查询这两张表,利用union all进行连接
(select u.uid,e.submit_time,1 as type from user_info u
left join exam_record e on e.uid=u.uid
where u.`level` BETWEEN 6 and 7
union all 
select u.uid,p.submit_time, 0 as type from user_info u
left join practice_record p on p.uid=u.uid
where u.`level` BETWEEN 6 and 7)
这里查询到的就是所有的对应的信息,为了区别试卷表和题目表数据的不同,我这里定义了一个type用来做区分
接下来我们只需要写子查询,并且分一下组就可以得到答案,sql如下:
select u.uid, count(distinct DATE_FORMAT(u.submit_time,'%Y-%m')) as act_month_total,
count(distinct case when year(u.submit_time)=2021 then DATE_FORMAT(u.submit_time,'%Y-%m-%d') end) as act_days_2021,
count(distinct case when YEAR(u.submit_time)=2021 and u.type=1 then DATE_FORMAT(u.submit_time,'%Y-%m-%d') end) as act_days_2021_exam,
count(distinct case when YEAR(u.submit_time)=2021 and u.type=0 then DATE_FORMAT(u.submit_time,'%Y-%m-%d') end) as act_days_2021_question
from 
(select u.uid,e.submit_time,1 as type from user_info u
left join exam_record e on e.uid=u.uid
where u.`level` BETWEEN 6 and 7
union all 
select u.uid,p.submit_time, 0 as type from user_info u
left join practice_record p on p.uid=u.uid
where u.`level` BETWEEN 6 and 7)
as u  
group by u.uid order by act_month_total desc ,act_days_2021 desc



全部评论

相关推荐

喜欢飞来飞去的雪碧在刷代码:可以试一试字节
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷面很爱看电影:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
家人们,我现在真的好纠结。我是26届的,目前还没有实习过。我现在的情况是,想参加秋招,但是感觉自己的简历特别空,没有实习经历会不会秋招直接凉凉啊?可我又听说现在很多公司对26届实习生也不太感冒,说什么不确定性大。而且我最近在准备考公,时间上也有点冲突。要是把时间花在实习上,备考时间就少了。但要是不实习,又怕以后就业有问题😫有没有懂行的友友帮我分析分析:26届现在不实习,秋招找工作真的会很难吗?考公和实习该怎么平衡啊?如果现在不实习,考完公再去找实习还来得及吗?真的太焦虑了,希望大家能给我点建议🙏
小破站_程序员YT:我可能和大家的观点不一样。人的精力是有限的,不能既要还要。你又想实习又想考公最后又要秋招上岸,我觉得哪有那么多的选择。你如果想考上岸,那就全力以赴。如果想秋招上岸,就继续投实习,投没了,就继续准备秋招,秋招不行继续春招。别到最后,考公没上岸,觉得是花了时间浪费在找实习上了, 秋招没上岸,觉得是浪费时间准备考公去了。我是认为很难说可以去平衡 不喜勿喷,可以叫我删除
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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