mysql - Ott 平台上的用户保留

标签 mysql sql data-science

我有一个名为 user_info 的表

它有两列:

User_id
Date

我如何到达如下所示的 table :

----------------------------------------------------------------
Date        |total_number_of_users | D2    |D5  |  D7 |   D14|
--------------------------------------------------------------
2020-07-01      1000                 700    500   200    150
2020-07-02      400                  300    250   200    100

例如,考虑我想要实现的表中的第一行:

total_number_of_users = Total number of users who have visited the site on 2020-07- 01

D2=在 2020-07-01 访问过该网站的用户总数中,有 2020-07-2 访问过该网站

D7=Out of total users who visited the site on 2020-07-01, visited on 2020-07-7

我尝试了以下方法,如何获得准确的解决方案:


SELECT user_id, week(login_date) AS login_week
    FROM user_info
    GROUP BY user_id,week(login_date);
SELECT user_id, min(week(login_date)) AS first_week
       FROM user_info
       GROUP BY user_id;
select a.user_id,a.login_week,b.first_week as first_week  from   
              (SELECT
                user_id,
                week(login_date) AS login_week
                FROM user_info
                GROUP BY user_id,week(login_date)) a,
              (SELECT
                user_id,
                min(week(login_date)) AS first_week
                FROM user_info
                GROUP BY user_id) b
        where a.user_id=b.user_id;

最佳答案

这看起来很痛苦,但您可以使用自连接和聚合:

select t.date,
       sum( t2.date = t.date) as total_number_of_users,
       sum( t2.date = t.date + interval 1 day ) as d2,
       sum( t2.date = t.date + interval 4 day ) as d5,
       sum( t2.date = t.date + interval 6 day ) as d7,
       sum( t2.date = t.date + interval 13 day ) as d14
from (select distinct date, user_id
      from t
     ) t1 left join
     (select distinct date, user_id
      from t
     ) t2
     on t1.user_id = t2.user_id and
        t2.date in (t1.date, t1.date + interval 1 day, t1.date + interval 4 day, t1.day + interval 6 day, t1.day + interval 13 day)
group by t.date;

关于mysql - Ott 平台上的用户保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62958652/

相关文章:

mysql - 表不存在,但确实存在

java - 缓存查询结果

python - 从 np.array 生成成对列组合

python - smote.fit_sample() 和 smote.fit_resample() 的区别

mysql - 将 MySQL 数据库链接到 MS Access 时如何包含关系?

mysql - laravel php artisan 错误

PHP 和 MYSQL "while"只打印一个值

sql - 错误 : syntax error at or near "SELECT"

mysql - 使用 JOIN 的 SQL UPDATE 查询

python - 在 tensorflow 中,如何在不实际训练的情况下评估神经元网络