select
    u_i.uid,
    count(distinct  date_format(start_time, '%Y%m')) act_month_total,
    count(distinct if(YEAR(start_time)=2021,date_format(start_time, '%Y%m%d'),null)) act_days_2021,
    count(distinct if(YEAR(start_time)=2021 and tag = "2",date_format(start_time, '%Y%m%d'),null)) act_days_2021_exam,
    count(distinct if(YEAR(start_time)=2021 and tag = "1",date_format(start_time, '%Y%m%d'),null)) act_days_2021_queston
from (select
          uid,
          submit_time start_time,
          '1' tag
      from practice_record
      union
      select
          uid,
          start_time,
          '2' tag
      from exam_record) mon
right join user_info u_i
on u_i.uid = mon.uid
where level =6 
OR level =7 
group by
    uid
order by
    act_month_total desc ,act_days_2021 desc;