当前位置:   article > 正文

【牛客】SQL135 每个6/7级用户活跃情况

【牛客】SQL135 每个6/7级用户活跃情况

描述

现有用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间):

iduidnick_nameachievementleveljobregister_time
11001牛客1号31007算法2020-01-01 10:00:00
21002牛客2号23007算法2020-01-01 10:00:00
31003牛客3号25007算法2020-01-01 10:00:00
41004牛客4号12005算法2020-01-01 10:00:00
51005牛客5号16006C++2020-01-01 10:00:00
61006牛客6号26007C++2020-01-01 10:00:00

试卷信息表examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间):

idexam_idtagdifficultydurationrelease_time
19001SQLhard602021-09-01 06:00:00
29002C++easy602021-09-01 06:00:00
39003算法medium802021-09-01 10:00:00

试卷作答记录表exam_record(uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交卷时间, score得分):

uidexam_idstart_timesubmit_timescore
100190012021-09-01 09:01:012021-09-01 09:31:0078
100190012021-09-01 09:01:012021-09-01 09:31:0081
100590012021-09-01 19:01:012021-09-01 19:30:0185
100590022021-09-01 12:01:012021-09-01 12:31:0285
100690032021-09-07 10:01:012021-09-07 10:21:5984
100690012021-09-07 10:01:012021-09-07 10:21:0181
100290012020-09-01 13:01:012020-09-01 13:41:0181
100590012021-09-01 14:01:01(NULL)(NULL)

题目练习记录表practice_record(uid用户ID, question_id题目ID, submit_time提交时间, score得分):

uidquestion_idsubmit_timescore
100180012021-08-02 11:41:0160
100480012021-08-02 19:38:0170
100480022021-08-02 19:48:0190
100180022021-08-02 19:38:0170
100480022021-08-02 19:48:0190
100680022021-08-04 19:58:0194
100680032021-08-03 19:38:0170
100680032021-08-02 19:48:0190
100680032020-08-01 19:38:0180

请统计每个6/7级用户总活跃月份数、2021年活跃天数、2021年试卷作答活跃天数、2021年答题活跃天数,按照总活跃月份数、2021年活跃天数降序排序。由示例数据结果输出如下:

uidact_month_totalact_days_2021act_days_2021_examact_days_2021_question
10063413
10012211
10051110
10021000
10030000

解释:6/7级用户共有5个,其中1006在202109、202108、202008共3个月活跃过,2021年活跃的日期有20210907、20210804、20210803、20210802共4天,2021年在试卷作答区20210907活跃1天,在题目练习区活跃了3天。

代码1:

  1. with cte1 as(
  2. select uid
  3. from
  4. user_info
  5. where level=6 or level=7
  6. ),
  7. cte2 as(
  8. select uid,start_time as act_time,'exam' as label from exam_record
  9. union
  10. select uid,submit_time as act_time,'question' as lebel from practice_record
  11. ),
  12. cte3 as(
  13. select uid,
  14. count(distinct left(act_time,7)) as act_month_total
  15. from cte1 left join cte2 using(uid)
  16. group by uid
  17. order by act_month_total desc
  18. ),
  19. cte4 as(
  20. select uid,
  21. count(distinct left(act_time,10)) as act_days_2021
  22. from cte1 left join cte2 using(uid)
  23. where left(act_time,4)=2021
  24. group by uid
  25. ),
  26. cte5 as(
  27. select uid,
  28. count(distinct left(act_time,10)) as act_days_2021_exam
  29. from cte1 left join cte2 using(uid)
  30. where left(act_time,4)=2021 and label='exam'
  31. group by uid
  32. ),
  33. cte6 as(
  34. select uid,
  35. count(distinct left(act_time,10)) as act_days_2021_question
  36. from cte1 left join cte2 using(uid)
  37. where left(act_time,4)=2021 and label='question'
  38. group by uid
  39. )
  40. select uid,
  41. ifnull(act_month_total,0),ifnull(act_days_2021,0),
  42. ifnull(act_days_2021_exam,0),ifnull(act_days_2021_question,0)
  43. from cte1 left join cte3 using(uid)
  44. left join cte4 using(uid)
  45. left join cte5 using(uid)
  46. left join cte6 using(uid)
  47. order by act_month_total desc,act_days_2021 desc

代码2(来源于讨论区的机智写法):

  1. SELECT uid,
  2. COUNT(DISTINCT DATE_FORMAT(act_time,'%Y%m')) as act_month_total,
  3. COUNT(DISTINCT IF(YEAR(act_time)=2021,act_time,null)) as act_days_2021,
  4. COUNT(DISTINCT IF(YEAR(act_time)=2021 and tag='exam',act_time,null)) as act_days_2021_exam,
  5. COUNT(DISTINCT IF(YEAR(act_time)=2021 and tag='question',act_time,null)) as act_days_2021_question
  6. FROM user_info
  7. LEFT JOIN (
  8. SELECT uid,DATE(start_time) as act_time,'exam' as tag
  9. FROM exam_record
  10. UNION
  11. SELECT uid,DATE(submit_time) as act_time,'question' as tag
  12. FROM practice_record
  13. )t
  14. using(uid)
  15. WHERE level>=6
  16. GROUP BY uid
  17. ORDER BY act_month_total DESC,act_days_2021 DESC;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/202604
推荐阅读
相关标签
  

闽ICP备14008679号