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

每个6/7级用户活跃情况

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

感觉这样更简单也更容易理解(?)

sql知识只需要用到三个表连接

  • 先求出act_days_2021_exam与act_days_2021_question
  • 把这两者求和,然后减去其中重合的部分(date(er.start_time)=date(p.submit_time) ),即为act_days_2021
  • act_month_total的逻辑与act_days_2021相同,求exam与question的和并减去重合部分

select u.uid, 

count(distinct date_format(er.start_time,'%Y%m'))+count(distinct date_format(p.submit_time,'%Y%m'))-count(distinct if(date_format(er.start_time,'%Y%m')=date_format(p.submit_time,'%Y%m'),er.start_time,null)) as act_month_total,

count(distinct if(year(er.start_time)=2021,date(er.start_time),null))
+count(distinct if(year(p.submit_time)=2021,date(p.submit_time),null))
-count(distinct if(date(er.start_time)=date(p.submit_time) and year(er.start_time)=2021,er.start_time,null)) as act_days_2021,

count(distinct if(year(er.start_time)=2021,date(er.start_time),null)) as act_days_2021_exam,

count(distinct if(year(p.submit_time)=2021,date(p.submit_time),null))  as act_days_2021_question

from user_info as u 
left join exam_record as er
on u.uid=er.uid 
left join practice_record as p
on u.uid=p.uid
where level=6 or level=7
group by u.uid
order by act_month_total desc, act_days_2021 desc
全部评论

相关推荐

不愿透露姓名的神秘牛友
10-04 05:12
kalistar:简历留六个字,北京大学(本科),黑体加粗,看看哪个hr不长眼敢碰瓷我们北大✌
点赞 评论 收藏
分享
10-15 10:23
门头沟学院 Java
牛可乐的头像真牛:赶紧举报,这公司绝对是诈骗的,等你签约后工作一两个月后根据合同漏洞把你开除,并且要求你赔偿3w培训费,996是为了提前筛选心甘情愿签下合同容易受骗的群体,纯粹面向校招生精心设计的骗局
你见过哪些工贼行为
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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