统计每个日期登录新用户个数

牛客每个人最近的登录日期(四)

http://www.nowcoder.com/questionTerminal/e524dc7450234395aa21c75303a42b0a

#明确问题:登录的当前日期=该用户所有登录日期的最小值

select date
        ,count(distinct case when (user_id,date) in
    (select user_id,min(date)from login group by user_id)
    then user_id else null end)
from login
group by date
order by date;


全部评论
如果新用户,第一天登录多次,就不适用了吧?
7 回复 分享
发布于 2021-06-08 23:27
/* 解决 如果新用户,第一天登录多次 的问题,如下:*/ select distinct date ,sum(case when (user_id,date) in (select user_id,min(date)from login group by user_id) then 1 else 0 end) from ( SELECT date , user_id FROM login group by date,user_id ) login group by date order by date
2 回复 分享
发布于 2021-12-18 14:17
艹,一句话解答。“登录的当前日期=该用户所有登录日期的最小值”赞
5 回复 分享
发布于 2022-05-07 15:27
答案第二行这里count(distinct...已经对user_id去重,可以解决用户第一天重复登录问题
3 回复 分享
发布于 2022-06-11 10:31
group by 就不需要加distinct了吧
3 回复 分享
发布于 2021-05-17 19:27
如果某一天存在重复登录的话,加distinct是没有用的。mysql先执行sum(case when)和group by,再执行distinct,所以没用
2 回复 分享
发布于 2022-01-17 21:52
以登陆日期为标准,第一天登陆的就是新用户,所以一天可能登陆多次,但还是算作一个新用户,需要对用户id去重
2 回复 分享
发布于 2021-09-24 16:08
distinct 解决的是同一天多次登陆用户的user-id
点赞 回复 分享
发布于 2023-06-22 21:00 北京
select distinct date, ifnull(b.cnt,0) from login left join (select md, count(*) cnt from (select user_id, min(date) md from login group by user_id) a group by md ) b on date=b.md order by date
点赞 回复 分享
发布于 2022-03-14 16:49
个人认为下面的解法效率更高 select d.date, (case when l.new is NULL then 0 else l.new end) as new from (select distinct date from login) as d left join (select f.date, count(f.user_id) as new from (select min(date) as date, user_id from login group by user_id) as f group by f.date ) as l on d.date = l.date order by d.date;
点赞 回复 分享
发布于 2022-02-26 18:11
登录的当前日期=该用户所有登录日期的最小值 不懂这个是什么意思
点赞 回复 分享
发布于 2021-11-29 15:40
感谢题解方法, 我加点建议 不需要DISTINCT了因为用了GOURP BY。 对于统一用户在其最近登录日期里登录多次的情况。 这里的 方法上需要改动一下。 我的想法是 可以在另一张 新表上用SUM CASE。 这个新表 可以叫做 UNI_NEW 他就是对 user_id, date GROUP BY 的表格 就排除了新用户同一天反复登录的情况。
点赞 回复 分享
发布于 2021-11-08 06:51
请问一下 我最后不写groupby为什么只出来第一天的结果呀 感谢~ SELECT distinct date, sum(case when (user_id,date) in (select distinct user_id, min(date) from login group by user_id) then 1 else 0 end) as new from login
点赞 回复 分享
发布于 2021-10-04 10:47
如果新用户,第一天登录多次,确实就会出问题。
点赞 回复 分享
发布于 2021-08-10 12:56

相关推荐

评论
193
12
分享

创作者周榜

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