with t as( #题目不够严谨,未考虑到访问时间和离开时间隔天的情况
select
    user_id,
    visit_time time
from visit_tb
union all
select 
    user_id,
    if(datediff(leave_time,visit_time) != 0,leave_time, 0 ) time
from visit_tb
)
select 
    vip,
    count(*) visit_nums,
    count(distinct user_id) visit_users
from t join uservip_tb using(user_id)
where time != 0 
group by vip 
order by visit_nums desc