题解 | #每个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
全部评论

相关推荐

2024-12-23 06:50
门头沟学院 Java
给点吧求求了:3点发的帖子,害怕😰
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务