如何在SQL中获取新订阅的数量和订阅续订的数量?

时间:2019-03-31 21:39:50

标签: mysql sql

此表代表用户订阅:

CREATE TABLE `subscriptions` (
  `id` int(11) NOT NULL,
  `email` varchar(255) DEFAULT NOT NULL,
  `created_at` datetime NOT NULL
);

同一封电子邮件可以有多个记录。

如何获取每月的新订阅数和每月的续订数?

假设在2018年7月通过电子邮件“ aaa@a.com”进行了订阅。如果在2018年8月通过“ aaa@a.com”进行了另一项订阅,则是续订。在2018年8月没有在2018年7月注册电子邮件的所有订阅都是新订阅。

2 个答案:

答案 0 :(得分:1)

您可以通过确定第一次看到订阅者来做到这一点:

select year(created_at), month(created_at),
       count(*) as num_subscribers,
       sum( min_ca = created_at ) as num_new_subscribers,
       sum( min_ca > created_at ) as num_renewals
from subscriptions s join
     (select email, min(created_at) as min_ca
      from subscriptions s
      group by email
     ) ss
     on s.email = ss.email
group by  year(created_at), month(created_at);

答案 1 :(得分:0)

通过仅计算续订次数并从订阅总数中减去,您还可以获得新的订阅:

select t.cyear, t.cmonth, (t.total - t.renewals) newsubs, t.renewals
  from (
  select 
    year(s.created_at) cyear, month(s.created_at) cmonth, 
    count(*) total,
    sum(
      case when exists (
        select 1 from subscriptions
        where 
          email = s.email and 
          last_day(s.created_at - interval 1 month) = last_day(created_at))
        then 1
        else 0
      end
    ) renewals
  from subscriptions s
  group by year(s.created_at), month(s.created_at)
) t