自己研究算了半天,发现过往基础不行,特把问题发着求助各位:
计算月留存(不是30日留存)
fi_user: 用户数据表
fi_user_action:用户活跃行为表
预期结果:
怎么写这个Mysql查询?
自己研究算了半天,发现过往基础不行,特把问题发着求助各位:
计算月留存(不是30日留存)
fi_user: 用户数据表
fi_user_action:用户活跃行为表
预期结果:
怎么写这个Mysql查询?
如果只是对目前这些数据, 倒是可以用 union all 把数据连到一个查询语句里。 如果还有更多月的数据, 那要根据数据具体改下语句。
一般应用中,为了逻辑简单,还是按楼上的思路比较合适。
SELECT '1月' AS 日期 , SUM(n_flag) AS 新增用户 , SUM(m2_flag) AS 2月留存 , SUM(m3_flag) AS 3月留存 FROM (
SELECT 0 AS n_flag , CASE month_flag WHEN '2020-02' THEN 1 ELSE 0 END AS m2_flag ,
CASE month_flag WHEN '2020-03' THEN 1 ELSE 0 END AS m3_flag
FROM (
SELECT DISTINCT userid , MID(createtime,1,7) AS month_flag FROM fi_user_action
) A -- 计算2,3月留存
UNION ALL
SELECT COUNT(1) AS n_flag, 0 AS m2_flag, 0 AS m3_flag
FROM fi_user WHERE created_at LIKE '2020-01%'
-- 计算1月新增
) B;