mysql 如何计算我的客户的保留率?

5t7ly7z5  于 2023-02-11  发布在  Mysql
关注(0)|答案(1)|浏览(135)

我目前正在尝试计算我的用户的保留率,我有困难得到我需要的。我想做的是在任何给定的日期能够计算所有新注册的用户,看看有多少回来后几天,几周,几个月等。
因此,我有不同的保留指标,我称之为D1(一天的留存率)、D7(一周的保留率)和D365(一年的保留率)。
下面是我的表格结构的一个简化示例:

下面是查询应该返回的结果的一个简化示例:

最后,下面是我当前的查询:

SELECT
       loginDate AS Date,
       sum(CASE WHEN DATEDIFF(loginDate, installDate) = 1 THEN 1 END) / count(*) AS D1,
       sum(CASE WHEN DATEDIFF(loginDate, installDate) = 7 THEN 1 END) / count(*) AS D7
  FROM logins
  GROUP BY loginDate

虽然我相信求和部分是正确的,但除以计数(*)看起来不对。我一直在尝试除以count(不同的用户ID),但也没有运气。总的来说,我不太确定如何在计算中考虑每个相关的日子。例如,如果我们采用D1指标,我很难找出如何将T+1时返回的用户除以T时创建帐户的用户总数。
有人能帮忙吗?

ghhkc1vu

ghhkc1vu1#

我觉得你应该这么做:
1.计算总共有多少用户创建了他们的帐户-因此,似乎对于每个userId行数据,其中installDate = loginDate是创建日期。
1.根据间隔首选项计算使用的用户数。
1.将间隔的计数结果除以用户创建的总数。
下面是您可以尝试的示例查询:

WITH cte1 AS
(SELECT DATEDIFF(loginDate, installDate) Intervals,
       COUNT(loginDate=installDate) userCount
  FROM logins
GROUP BY Intervals),
 cte2 AS (
  SELECT 1,
       SUM(CASE WHEN Intervals=0 THEN userCount ELSE 0 END) totalInstalledUser,
       SUM(CASE WHEN Intervals=1 THEN userCount ELSE 0 END) D1,
       SUM(CASE WHEN Intervals=7 THEN userCount ELSE 0 END) D7
FROM cte1
GROUP BY 1)
SELECT totalInstalledUser,
       (D1/totalInstalledUser)*100 D1Percentage,
       (D7/totalInstalledUser)*100 D7Percentage
   FROM cte2

这将为您提供以下结果:
| 已安装用户总数|D1百分比|D 7百分比|
| - ------|- ------|- ------|
| 四个|五十|二十五|
Here's a fiddle breakdown of the query
至于在查询中,除了获取天间隔之外,还使用了日期列,您可能只会使用它来指定一个installDate范围,最有可能是在第一个查询中:

SELECT DATEDIFF(loginDate, installDate) Intervals,
       COUNT(loginDate=installDate) userCount
  FROM logins
WHERE installDate >= 'some date'
AND installDate <= 'some date'
GROUP BY Intervals

相关问题