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

Cómo calcular el total acumulado en MySQL

MySQL no tiene una función para calcular el total acumulado, también conocido como total acumulado. Debe escribir una consulta SQL para calcular la suma acumulativa en MySQL. Entonces, veamos una consulta SQL para calcular el total acumulado en MySQL.

Cómo calcular el total acumulado en MySQL

Aquí se explica cómo calcular el total acumulado en MySQL. Supongamos que tiene la siguiente tabla que contiene las ventas diarias.

mysql> create table sales(order_date date,sale int);

mysql> insert into sales values('2020-01-01',20),
('2020-01-02',25),('2020-01-03',15),('2020-01-04',30),('2020-01-05',20);

mysql> select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-01-01 |   20 |
| 2020-01-02 |   25 |
| 2020-01-03 |   15 |
| 2020-01-04 |   30 |
| 2020-01-05 |   20 |
+------------+------+

Digamos que desea calcular el total acumulado para esta tabla, así.

+------------+------+-----------------+
| order_date | sale | cumulative_sale |
+------------+------+-----------------+
| 2020-01-01 |   20 |              20 |
| 2020-01-02 |   25 |              45 |
| 2020-01-03 |   15 |              60 |
| 2020-01-04 |   30 |              90 |
| 2020-01-05 |   20 |             110 |
+------------+------+-----------------+

Lectura adicional: Cómo concatenar varias filas en un campo en MySQL

Aquí está la consulta SQL para calcular el total acumulado en MySQL.

mysql> set @csum := 0;
mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale
       from sales
       order by order_date;
+------------+------+-----------------+
| order_date | sale | cumulative_sale |
+------------+------+-----------------+
| 2020-01-01 |   20 |              20 |
| 2020-01-02 |   25 |              45 |
| 2020-01-03 |   15 |              60 |
| 2020-01-04 |   30 |              90 |
| 2020-01-05 |   20 |             110 |
+------------+------+-----------------+

En la consulta anterior, primero establecemos una variable definida por el usuario csum en 0. Luego la usamos para almacenar el total acumulado de cada fila. Es importante tener en cuenta que csum no se almacena en ninguna tabla. Simplemente se usa para mostrar los valores totales acumulados.

Si desea almacenar este total acumulado, puede agregar una nueva columna a su tabla y usar la cláusula UPDATE para almacenar los valores totales acumulados.

mysql> alter table sales add column cumulative_sum int;

mysql> set @csum := 0;

mysql> update sales
       set cumulative_sum = (@csum := @csum + sale)
       order by order_date;

mysql> select order_date,sale,cumulative_sum from sales;
+------------+------+----------------+
| order_date | sale | cumulative_sum |
+------------+------+----------------+
| 2020-01-01 |   20 |             20 |
| 2020-01-02 |   25 |             45 |
| 2020-01-03 |   15 |             60 |
| 2020-01-04 |   30 |             90 |
| 2020-01-05 |   20 |            110 |
+------------+------+----------------+

Lectura adicional: Cómo agregar una fila total en MySQL

También puede personalizar su consulta SQL usando la cláusula WHERE o JOINS, como se muestra,

mysql> set @csum := 0;
mysql> select order_date,sale, (@csum := @csum + sale) as cumulative_sale
       from sales where <condition>
       order by order_date;


Dado que MySQL no ofrece ninguna función integrada para el total acumulado, puede usar la consulta SQL anterior para el total acumulado en MySQL. También puede usar MONTH(order_date) en lugar de order_date arriba si desea escribir SQL para la suma acumulada por mes.

Una vez que calcule el total acumulado, puede usar una herramienta de gráficos para trazar estos datos en un gráfico de líneas y compartirlo con su equipo. Este es un ejemplo de un gráfico de líneas que muestra el total acumulado, creado con Ubiq.

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.