用户注册表按照时间累积统计,应用group by 以及子查询

需求

一天运营的小姐姐跟我说,我想要一个报表,来分析从上线到现在用户每个月的注册数量,按照月份就行统计。并且我要知道截止到这个月总的用户数是多少。

分析

拿到这个需求我们先看一下用户表 users 的结构是什么

id name create_at
1 nihao 2020-10-05 15:55:55
2 wohao 2020-10-06 15:55:55

那么运营的小姐姐想要得到的表是什么

当月累计 当月新增 时间年月
1 1 2020-10
6 5 2020-11

mysql语句

首先我们先得到每个月的新增人数,这个没那么复杂

SELECT DATE_FORMAT(created_at, "%Y-%m") AS date, COUNT(*) AS num FROM users GROUP BY date

我们得到的表为

num date
1 2020-10
5 2020-11

我们将上面的sql语句成为A
关键的时候来了

我们要拿到累计的数量,就需要把A语句当做一个结果表 BB

select sum(num) from {(A)  as BB} 
相当于
select sum(字段) fromBB 我们成为 C语句

关键时候来了,我们要得到每个月的累计那么,就要每个月进行一次sum操作,那么就要求每次查询都要小于等于在A语句的结果的日期的那个记录进行sum

那么我们就要继续建立一个A语句的结果表我们成为AA

select ( C语句 where BB.date<= AA.date )as tnum,AA.num,AA.date from A语句 as AA

最后整理一下就是如下语句

select ( 
select SUM((bb.num)) from (
SELECT DATE_FORMAT(created_at, "%Y-%m") AS date, COUNT(*) AS num FROM users GROUP BY date
    ) as  bb where aa.date >=bb.date 
) as  tnum,aa.num,aa.date  from (SELECT DATE_FORMAT(created_at, "%Y-%m") AS date, COUNT(*) AS num FROM users GROUP BY date  ) aa
本作品采用《CC 协议》,转载必须注明作者和本文链接
人生的意义在于承担人生无意义的勇气
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!