ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

一天一道Sql题(day05)

一天一道Sql题(day05)

有用户登录表A,字段如下:
字段    类型    含义
user_id bigint  用户uid
device_id   bigint  设备ID
login_date  string  登录日期
求解:如果用户第一天登录算新用户,求每一天登录的新老用户数

思路:

用开窗函数增加一个排序列。根据用户id分组后按照登录时间降序排序,如果排名是1说明用户是第一次登录是新用户,否则就是老用户

使用对日期分组,在sum出每天新老用户数

sql:

with t as (select  user_id,login_date,row_number() over(partition by user_id order by login_date desc) numfrom A
)
select login_date,sum(if(num==1,1,0)) as new_user,sum(if(num>1,1,0)) as old_user
from t 
group by login_date
order by login_date desc

我是在csdn上直接手敲的sql,没有运行验证,有错误的地方请指出~

返回列表