题解 | #每月及截止当月的答题情况#

每月及截止当月的答题情况

https://www.nowcoder.com/practice/1ce93d5cec5c4243930fc5e8efaaca1e

-- 关键点在于如何求取新增用户数
-- 1、先求新增用户数:用min(start_time)求第一次作答,如果start_time=min,则为当月新增用户,设置flag字段并标记为1
# select
#     uid,
#     date_format(start_time,'%Y-%m') as start_month,
#     if(start_time=min(start_time) over(partition by uid),1,0) 
#         as flag
# from exam_record

-- 2、用group by + 窗口函数求解
select
    replace(start_month,'-',''),
    count(distinct uid) as mau,
    sum(flag) month_add_uv,
    max(sum(flag)) over(order by start_month) 
        as max_month_add_uv,
    sum(sum(flag)) over(order by start_month) as cum_sum_uv
from (
    select
        uid,
        date_format(start_time,'%Y-%m') as start_month,
        if(start_time=min(start_time) over(partition by uid),1,0) 
            as flag
    from exam_record) t1
group by start_month

全部评论

相关推荐

点赞 评论 收藏
分享
Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务