题解 126 | #平均活跃天数和月活人数#

【场景】:平均活跃天数和月活人数

【分类】:分组查询、count(distinct 2个字段)

分析思路

难点:

1.如何计算活跃天数?对日期、用户去重

如何计算平均活跃天数

可能存在的情况:

一、2个不同用户在同一天有记录,活跃天数为2,活跃人数为2。

二、2个不同用户在不同天各有一条记录,活跃天数为2,活跃人数为2。

三、1个用户在同一天有2条记录,活跃天数为1,活跃人数为1。

  • 使用count(distinct day(submi_time))计算活跃天数,在情况一中得到活跃天数为1,与题目要求不符;
  • 使用count(day(submi_time))计算活跃天数,在情况三中得到活跃天数为2,与题目要求不符;
  • 使用count(distinct uid, day(submi_time))计算活跃天数,在三种情况中均符合题目要求。

count(distinct 2个字段):将2个字段作为一个字段看待

求解代码

方法一:

#平均活跃天数  
select
    date_format(start_time,'%Y%m') as month,
    round(count(distinct uid,day(submit_time))/count(distinct uid),2) as avg_active_days,
    count(distinct uid) as mau
from exam_record
where year(submit_time) = 2021
and submit_time is not null
group by month
全部评论
你这个说法才是对的,评论中很多人说忽略UID的筛选是基于情况3,实际上情况1才对。要正确定位情况1才能理解UID的去重
点赞
送花
回复
分享
发布于 2023-01-05 12:36 湖北

相关推荐

8 6 评论
分享
牛客网
牛客企业服务