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

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

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

  1. 首先,建立一张表,包含用户活跃的日期以及成为新用户的日期,因为in和out可以跨天,并且一个用户可以在一天内活跃多次,所以我们要用union来去重,用窗口函数来寻找新用户日期:min(date(in_time))OVER(PARTITION BY uid)
  2. 然后在上表的基础上,新增一列来表示它是否是新用户,如果活跃日期等于成为新用户日期,则返回1,否则返回0
  3. 最后在上表基础上,计算即可。
  • 怎么说呢,最近感觉做题很没有思路,这道题和上道题都是参考别人的才做出来,感觉看别人的就觉得逻辑很简单,但自己却想不到,而且感觉做题很没有状态,不像之前了,是因为休息了几天反而思维跟不上了?还是因为基础确实不够牢固,值得反思
select
 dt,
 count(1) as dau,
 round(sum(num)/count(1),2) as uv_new_ratio
 from
 (select
	*,
    if(dt=new_dt,1,0) as num
from
(SELECT  uid,DATE(in_time) dt,MIN(DATE(in_time))OVER(PARTITION BY uid) new_dt FROM tb_user_log
UNION
SELECT  uid,DATE(out_time) dt,MIN(DATE(in_time))OVER(PARTITION BY uid) new_dt FROM tb_user_log)t1)t2
group by dt
order by dt

全部评论

相关推荐

陈生6:不可以全是stm32哦,太没档次了。上次来我们学校校招的上来就要求升腾芯片什么的喵。stm32,穷小子高攀不上了喵
点赞 评论 收藏
分享
10-30 19:23
已编辑
山东大学(威海) C++
牛至超人:其实简历是不需要事无巨细的写的,让对方知道你有这段经历就行了,最重要的是面试的时候讲细讲明白
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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