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