题解 | #每天的日活数及新用户占比#

每天的日活数及新用户占比

https://www.nowcoder.com/practice/dbbc9b03794a48f6b34f1131b1a903eb

# Q:统计每天的日活数及新用户占比
# 字段:dt	、dau	、uv_new_ratio(new_uv/dau)

# 标记新用户 if&min over
with table1 as(
    select distinct uid,
    date_format(in_time,'%Y-%m-%d') as dt,
    if(in_time = min(in_time)over(partition by uid),1,0) as if_new
    from tb_user_log
    UNION
    select distinct uid,
    date_format(out_time,'%Y-%m-%d') as dt,
    if(out_time = min(in_time)over(partition by uid),1,0) as if_new
    from tb_user_log
)

select dt,
count(distinct uid) as dau, # 日活
# sum(if_new) as new_uv,
round(sum(if_new) / count(distinct uid),2) as uv_new_ratio
from table1
group by dt


# select date_format(in_time,'%Y-%m-%d') as dt,
# count(distinct uid) as dau, # 日活
# count(case when in_date = out_date then distinct uid else) as 
# # sum(if_new) as new_uv,
# round(sum(if_new) / count(distinct uid),2) as uv_new_ratio
# from table1
# group by date_format(in_time,'%Y-%m-%d')


# SELECT DISTINCT uid,DATE(in_time) dt,MIN(DATE(in_time))OVER(PARTITION BY uid) new_dt FROM tb_user_log
# UNION
# SELECT DISTINCT uid,DATE(out_time) dt,MIN(DATE(in_time))OVER(PARTITION BY uid) new_dt FROM tb_user_log



# 注意点: 
# 1.标记新用户常规操作: 
# if(start_time = min(start_time)over(partition by uid))
# 2.跨天,判断是否存在跨天操作,存在则添加一个

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
点赞 评论 收藏
分享
lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务