sql >> Base de Datos >  >> RDS >> Mysql

Cómo obtener usuarios totales acumulados por día en MySQL

Los usuarios totales acumulados diarios son una métrica de KPI muy útil para analizar el crecimiento de usuarios, para cada negocio. Sin embargo, dado que no hay una función integrada para calcular el total acumulado en MySQL, aquí está la consulta SQL para obtener el total acumulado de usuarios por día, también conocido como suma acumulada por fecha o total acumulado de usuarios.

Cómo obtener usuarios totales acumulados por día en MySQL

Estos son los pasos para obtener el total acumulado de usuarios por día en MySQL. Supongamos que tiene la siguiente tabla users(date_joined,user_id) que contiene todos los ID de usuario con su fecha de registro/registro/unión para su negocio.

mysql> create table users(date_joined date,user_id int);

mysql> insert into users(date_joined,user_id)
       values('2020-04-28',213),
       ('2020-04-28',214),
       ('2020-04-30',215),
       ('2020-04-28',216),
       ('2020-04-28',217),
       ('2020-04-30',218),
       ('2020-04-28',219),
       ('2020-04-28',220),
       ('2020-04-30',221),
       ('2020-05-01',222),
       ('2020-05-01',222),
       ('2020-05-01',223),
       ('2020-05-04',224),
       ('2020-05-04',225),
       ('2020-05-04',226),
       ('2020-05-04',226),
       ('2020-05-04',227),
       ('2020-05-04',228),
       ('2020-05-05',229),
       ('2020-05-05',230),
       ('2020-05-05',231),
       ('2020-05-05',232),
       ('2020-05-06',233),
       ('2020-05-06', 234);

mysql> select * from users;
+-------------+---------+
| date_joined | user_id |
+-------------+---------+
| 2020-04-28  |     213 |
| 2020-04-28  |     214 |
| 2020-04-30  |     215 |
| 2020-04-28  |     216 |
| 2020-04-28  |     217 |
| 2020-04-30  |     218 |
| 2020-04-28  |     219 |
| 2020-04-28  |     220 |
| 2020-04-30  |     221 |
| 2020-05-01  |     222 |
| 2020-05-01  |     222 |
| 2020-05-01  |     223 |
| 2020-05-04  |     224 |
| 2020-05-04  |     225 |
| 2020-05-04  |     226 |
| 2020-05-04  |     226 |
| 2020-05-04  |     227 |
| 2020-05-04  |     228 |
| 2020-05-05  |     229 |
| 2020-05-05  |     230 |
| 2020-05-05  |     231 |
| 2020-05-05  |     232 |
| 2020-05-06  |     233 |
| 2020-05-06  |     234 |
+-------------+---------+

Primero, miramos una consulta SQL para calcular el número diario de registros

mysql> select date(date_joined),count(user_id) 
       from users 
       group by date(date_joined);
+-------------------+----------------+
| date(date_joined) | count(user_id) |
+-------------------+----------------+
| 2020-04-28        |        6       |
| 2020-04-30        |        3       |
| 2020-05-01        |        3       |
| 2020-05-04        |        6       |
| 2020-05-05        |        4       |
| 2020-05-06        |        2       |
+-------------------+----------------+

A continuación, aquí está la consulta SQL para obtener el total acumulado de usuarios por día en MySQL. Usaremos el SQL anterior como una subconsulta para obtener el total acumulado en SQL.

mysql> set @csum := 0;

mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date(date_joined) as date_joined,count(user_id) as new_users
             from users
             group by date(date_joined)
            ) as temp
            order by date_joined;
+-------------+-----------+-------------+
| date_joined | new_users | total_users |
+-------------+-----------+-------------+
| 2020-04-28  |         6 |           6 |
| 2020-04-30  |         3 |           9 |
| 2020-05-01  |         3 |          12 |
| 2020-05-04  |         6 |          18 |
| 2020-05-05  |         4 |          22 |
| 2020-05-06  |         2 |          24 |
+-------------+-----------+-------------+

En la consulta anterior, establecemos una variable temporal csum en 0. Luego, para cada fila, la usamos para calcular y almacenar la suma acumulada de usuarios.

Después de obtener el total de usuarios acumulados por día en MySQL, puede trazarlo en un gráfico de líneas o panel utilizando una herramienta de informes como Ubiq y compartirlo con su equipo. Aquí hay un gráfico de líneas creado con Ubiq.

Si desea obtener un total acumulado condicional en MySQL, puede agregar una cláusula WHERE en la subconsulta, según sus requisitos.

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date(date_joined) as date_joined,count(user_id) as new_users
             from users 
             WHERE <condition>
             group by date(date_joined)
            ) as temp
            order by date_joined;

Puede modificar fácilmente la consulta SQL anterior para calcular el total de usuarios acumulados por semana, mes, trimestre y año. Veámoslos uno por uno. Usaremos la función DATE_FORMAT para obtener fácilmente las columnas de semana y mes a partir de la fecha.

Lectura adicional:Cómo calcular los ingresos en MySQL

Cómo obtener usuarios totales acumulados por semana en MySQL

Aquí está la consulta SQL para obtener el total acumulado de usuarios por semana en MySQL. En la consulta SQL para obtener el total de usuarios acumulados por día, solo necesita cambiar la función de agregación en la subconsulta, desde date(date_joined) a formato_de_fecha(formato_de_fecha,'%U') .

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date_format(date_joined,'%U') as date_joined,
               count(user_id) as new_users
             from users
             group by date_format(date_joined,'%U')
            ) as temp
            order by date_joined;

En la consulta anterior, también puede usar la función WEEK en lugar de DATE_FORMAT, es decir, use WEEK (date_joined) en lugar de DATE_FORMAT (date_joined, '%U')

Lectura adicional:Cómo obtener registros del mes actual en MySQL

Cómo obtener usuarios totales acumulados por mes en MySQL

Aquí está la consulta SQL para obtener el total acumulado de usuarios por mes en MySQL. En la consulta SQL para obtener el total de usuarios acumulados por día, solo necesita cambiar la función de agregación en la subconsulta, desde date(date_joined) a formato_de_fecha(formato_de_fecha,'%b') .

mysql> set @csum := 0;

mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select date_format(date_joined,'%b') as date_joined,
               count(user_id) as new_users
             from users
             group by date_format(date_joined,'%b')
            ) as temp
            order by date_joined;

Lectura adicional:Cómo obtener datos de ventas de los últimos 3 meses en MySQL

Cómo obtener usuarios totales acumulados por trimestre en MySQL

Aquí está la consulta SQL para obtener el total acumulado de usuarios por trimestre en MySQL. En la consulta SQL para obtener el total de usuarios acumulados por día, solo necesita cambiar la función de agregación en la subconsulta, desde date(date_joined) al trimestre(formato_de_fecha) .

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select quarter(date_joined) as date_joined,
               count(user_id) as new_users
             from users
             group by quarter(date_joined)
            ) as temp
            order by date_joined;

Cómo obtener usuarios totales acumulados por año en MySQL

Aquí está la consulta SQL para obtener el total acumulado de usuarios por año en MySQL. En la consulta SQL para obtener el total de usuarios acumulados por día, solo necesita cambiar la función de agregación en la subconsulta, desde date(date_joined) al año(formato_de_fecha) .

mysql> set @csum := 0;
mysql> select date_joined,new_users, (@csum := @csum + new_users) as total_users
            from (
             select year(date_joined) as date_joined,
               count(user_id) as new_users
             from users
             group by year(date_joined)
            ) as temp
            order by date_joined;

¡Eso es todo! Puede probar las consultas SQL anteriores para obtener el total acumulado de usuarios por día en MySQL. Si desea crear gráficos, paneles e informes desde la base de datos MySQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.