Suma acumulativa de SQL

Suma Acumulativa De Sql



En SQL, una suma acumulativa se refiere a un método que nos permite calcular el total acumulado de una columna numérica dentro de una tabla de base de datos. Una suma acumulativa entra en juego en una amplia variedad de escenarios, como el seguimiento del progreso o el cálculo de los promedios móviles de un valor determinado.

En este tutorial, aprenderemos cómo implementar y utilizar la suma acumulativa en SQL utilizando varios métodos y técnicas.







Data de muestra

Para comprender mejor cómo podemos implementar y utilizar la suma acumulativa, comencemos configurando una tabla básica con datos de muestra. Esto nos permite demostrar el funcionamiento de todos los métodos de forma rápida y eficiente en esta publicación.



Comience creando una tabla básica que almacene la información del producto.



CREAR TABLA productos (
product_id INT CLAVE PRIMARIA,
nombre_producto VARCHAR ( 255 ) ,
precio DECIMAL ( 10 , 2 )
) ;

 





Esto debería crear una nueva tabla llamada 'productos' que almacena la identificación del producto, el nombre del producto y el precio de cada producto.

Luego podemos proceder a agregar datos de muestra como se muestra en las siguientes declaraciones de inserción de ejemplo:



INSERTAR EN productos ( id_producto, nombre_producto, precio )
VALORES
    ( 1 , 'Código de estudio visual' , 10.00 ) ,
    ( 2 , 'Texto sublime' , 80.00 ) ,
    ( 3 , 'PyCharm Profesional' , 199.00 ) ,
    ( 4 , 'IDE de eclipse' , 30.00 ) ,
    ( 5 , 'IntelliJ IDEA último' , 699.00 ) ,
    ( 6 , 'Escritorio GitHub' , 20.00 ) ,
    ( 7 , 'Esperar software' , 10.00 ) ,
    ( 8 , 'Xcódigo' , 660.00 ) ,
    ( 9 , 'NetBeans' , 0.00 ) ,
    ( 10 , 'Átomo' , 60.00 ) ;

 

NOTA: Los datos proporcionados son completamente ficticios. No representa el precio real de ninguno de los artículos enumerados.

La tabla resultante es la siguiente:

Suma acumulativa de SQL (autounión)

Una de las técnicas que podemos utilizar para realizar una suma acumulativa en una columna determinada es utilizar el método de autounión. Una ventaja de este método es que funciona en casi todas las bases de datos SQL, incluso aquellas que no admiten las funciones de Windows.

Tomemos, por ejemplo, la tabla anterior de “productos”. Podemos crear la suma acumulada de la columna de precio como se demuestra en la siguiente consulta:

SELECCIONAR
p1.product_id,
p1.nombre_producto,
p1.precio,
SUMA ( p2.precio ) AS suma_acumulada
DE
productos p1
UNIRSE
productos p2
EN
p1.id_producto > = p2.id_producto
AGRUPAR POR
p1.product_id,
p1.nombre_producto,
p1.precio
ORDENAR POR
p1.product_id;

 

¿Notaste el funcionamiento de la consulta? Si no, quédate con nosotros mientras te lo explicamos paso a paso.

En la consulta de ejemplo dada, comenzamos creando dos alias, 'p1' y 'p2', para la tabla 'productos', lo que nos permite realizar una autounión.

Luego procedemos a unir “p1” y “p2” con la condición de que el “product_id” de “p1” sea mayor o igual al “product_id” de “p2”.

En el siguiente paso, llamamos a la función sum() que básicamente calcula la suma acumulada de los precios de cada fila.

Por último, agrupamos los resultados utilizando 'product_id', 'product_name' y 'price' y ordenamos los resultados.

Después de esta operación, deberíamos tener una suma acumulada para cada registro como se demuestra en la tabla resultante como se muestra a continuación:

Como puede ver, obtenemos la suma total de todas las filas anteriores. La última fila debe contener la suma total de todas las filas anteriores.

Suma acumulativa de SQL (funciones de ventana)

Una forma más eficiente y práctica de calcular la suma acumulada en SQL es aprovechar las funciones de ventana siempre que sean compatibles.

Si tiene una base de datos como SQL Server, PostgreSQL o MySQL versión 8.0 y superior, este es el método más útil y recomendado para determinar la suma acumulada de una columna determinada.

Eche un vistazo al ejemplo que se muestra a continuación:

SELECCIONAR
ID del Producto,
nombre del producto,
precio,
SUMA ( precio ) ENCIMA ( PEDIR POR id_producto ) AS suma_acumulada
DE
productos;

 

En este caso, comenzamos seleccionando las columnas 'product_id', 'product_name' y 'price' de la tabla 'products'.

Luego usamos la función SUM() como función de ventana usando la cláusula OVER.

En la cláusula OVER, especificamos la cláusula ORDER BY que define el orden en el que se calcula la suma acumulativa.

Esto debería devolver un resultado similar al que se muestra a continuación:

Notará que el uso de las funciones de ventana es más coherente, eficiente y legible en comparación con el uso de autouniones.

Conclusión

En este tutorial, aprendimos todo sobre sumas acumulativas en SQL. También cubrimos cómo usar las funciones de ventana y autouniones para realizar la suma acumulativa en SQL.