题解 | #每个6/7级用户活跃情况#
每个6/7级用户活跃情况
https://www.nowcoder.com/practice/a32c7c8590324c96950417c57fa6ecd1
with
levellist as (
select
uid
from
user_info
where
level in (6, 7)
)
select
uid,
count(distinct date_format(submit_time,"%YY-%mm")) as act_month_total,
count(distinct if(year(submit_time) = 2021 and day(submit_time) is not null ,date_format (submit_time,"%YY-%mm-%dd"),null)) as act_days_2021,
count(distinct if(year(submit_time) = 2021 and day(submit_time) is not null and tag = "exam",date_format(submit_time,"%YY-%mm-%dd"),null)) as act_days_2021_exam,
count(distinct if(year(submit_time) = 2021 and day(submit_time) is not null and tag = "practice",date_format(submit_time,"%YY-%mm-%dd"),null)) as act_days_2021_question
from(
select uid, submit_time, tag from
levellist left join (
select
uid,
start_time as submit_time,
'exam' as tag
from
exam_record
where
uid in (
select
*
from
levellist
)
union
select
uid,
submit_time,
'practice' as tag
from
practice_record
where
uid in (
select
*
from
levellist
)
) as combinedlist
using(uid)
) as fianllist
group by
uid
order by
act_month_total desc,
act_days_2021 desc
本题很烦,第一点先求出符合level在6-7的uid列表with的临时表,然后与practice_record和exam_record根据tag的不同进行一个匹配,然后与临时表进行一个左连接,这样就能求出所有uid下的所有时间
查看25道真题和解析