WITH v1 AS( SELECT uid, REPLACE(LEFT(submit_time, 10), '-', '') month FROM exam_record WHERE submit_time IS NOT NULL AND YEAR(submit_time) = 2021 ) SELECT LEFT(month,6) the_date, ROUND(COUNT(DISTINCT uid, month)/COUNT(DISTINCT uid), 2) avg_active_days, COUNT(DISTINCT uid) mau FROM v1 GROUP BY the_date ORDER BY the_date
题解:
任务是求21年每月的平均活跃天数和月活人数
思路:
每月,那就是分组groupby
月活人数就是查找每月的uid的个数,去重
难点在平均活跃天数,最先我理解的是每月的记录出现的次数就是活跃的总天数,最先写的代码就是
ROUND(COUNT(*)/COUNT(DISTINCT uid), 2) avg_active_days,
但是根据题干,101活跃1天,这样理解,就是要找到每个用户活跃了几天,如果101用户在某一天有多次提交记录呢?那算一天还是多天?答案是一天
所以要使用distinct