zoukankan      html  css  js  c++  java
  • 新登录用户的次日成功的留存率

    牛客每天有很多人登录,请你统计一下牛客新登录用户的次日成功的留存率,
    有一个登录(login)记录表,简况如下:

    第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备第一次新登录了牛客网
    。。。

    第4行表示id为3的用户在2020-10-12使用了客户端id为2的设备登录了牛客网
    。。。
    最后1行表示id为1的用户在2020-10-14使用了客户端id为2的设备登录了牛客网



    请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入),上面的例子查询结果如下:

    查询结果表明:
    id为1的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存

    id为2的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存

    id为3的用户在2020-10-12第一次新登录了,在2020-10-13没登录了,算是失败的留存
    id为4的用户在2020-10-13第一次新登录了,在2020-10-14没登录了,算是失败的留存

    固次日成功的留存率为 2/4=0.5

    (sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, '+1 day'),四舍五入的函数为round,sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5
    mysql里查找某一天的后一天的用法是:DATE_ADD(yyyy-mm-dd,INTERVAL 1 DAY),四舍五入的函数为round)

    找到表中每个id的登录最小时间,并加上1天构造新表。

    如果login中id,date数据存在于这个新表中,就说明这个用户是留存的

    select 
    round(count(distinct user_id)*1.0/(select count(distinct user_id) from login),3)
    from login
    where (user_id,date) in
    (select user_id,DATE_ADD(min(date),INTERVAL 1 DAY) from login group by user_id)

    定义和用法
    DATE_ADD() 函数向日期添加指定的时间间隔。

    语法
    DATE_ADD(date,INTERVAL expr type)
    date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。

    type 参数可以是下列值:
    MICROSECOND
    SECOND
    MINUTE
    HOUR
    DAY
    WEEK
    MONTH
    QUARTER
    YEAR
    SECOND_MICROSECOND
    MINUTE_MICROSECOND
    MINUTE_SECOND
    HOUR_MICROSECOND
    HOUR_SECOND
    HOUR_MINUTE
    DAY_MICROSECOND
    DAY_SECOND
    DAY_MINUTE
    DAY_HOUR
    YEAR_MONTH

  • 相关阅读:
    文件系统
    MySQL中添加唯一约束和联合唯一约束
    Ubuntu(Debian)的aptitude与apt-get的区别和联系
    透明与Z序示例
    Qt Quick分组属性案例
    TextView 设置超过几行后显示省略号
    ionic list item-radio checked
    webkit的基本应用
    信号槽操作案例
    报错:tr was not declared in this scope
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14378489.html
Copyright © 2011-2022 走看看