Cargando la página...

Suma acumulativa

Publicado por Gastón el 01/08/2009 en MySQL - Nivel Intermedio

Tabla de contenidos

Avatar de

La tabla de contenidos pertenece al artículo completo y no al contenido parcial de cada página del mismo si fuese el caso.

Leer los comentarios.

Resúmen

Suma acumulativa con una única consulta sql. Ejemplo completo.

Sobre el autor

Avatar de Gastón

Gastón tiene 30 años, vive en Argentina / Santa Fe / Santa Fe y su ocupación es Desarrollador de aplicaciones web.

Forma parte del club desde 19/10/2009 a las 20:52 habiendo estado en linea ayer a las 00:18 por última vez.

Ha publicado 47 artículos en clubdesarrolladores con un promedio de valoración de 7.87 puntos. Puedes visitar su sitio web en http://www.devstudios.com.ar

Estadísticas

  • Leido 5344 veces
  • Valorado 9.00 puntos

Situación



Un vendedor tiene que presentar un informe de acuerdo a las ventas realizadas de un determinado producto desde principio del año, con detalle mes a mes de manera acumulativa, es decir sumando las cantidades de cada mes.

Los datos y el resultado deseado



Se tiene como dato las ventas realizadas del producto para cada mes y se desea presentar un informe donde se vea el crecimiento de las ventas a lo largo del año.

Este es un ejemplo de datos del vendedor:

En enero vendió 10 unidades del producto
En febrero vendió 6 unidades del producto
En marzo vendió 14 unidades del producto


El informe debe presentar la información de esta manera:

Para enero se vendieron 10 unidades del producto
Para febrero se vendieron 16 (10+6) unidades del producto
Para marzo se vendieron 30 (10+6+14) unidades del producto


La base de datos



Tabla Ventas

CREATE TABLE ventas
(
id int not null auto_increment primary key,
mes varchar(20) not null,
cantidad int not null,
unique (mes)
);


Las consultas



Producto cartesiano

Seleccionaremos primero la cantidad de productos vendidos de cada mes

select mes, cantidad from ventas where id < ?


Debemos comparar cada tupla de ventas el conjunto de todas las tuplas de la misma.

select v1.mes, v1.cantidad, v2.mes, v2.cantidad from ventas v1, ventas v2


Consideremos que la tabla ventas contiene los siguientes datos:

id mes cantidad
-----------------------------------------------------
1 enero 10
2 febrero 6
3 marzo 14


Aplicando el producto cartesiano obtenemos:

mes cantidad mes cantidad
------------------------------------------------------------------
enero 10 enero 10
enero 10 febrero 6
enero 10 marzo 14
febrero 6 enero 10
febrero 6 febrero 6
febrero 6 marzo 14
marzo 14 enero 10
marzo 14 febrero 6
marzo 14 marzo 14


Ahora debemos restringir los resultad para cada mes a los meses anteriores:

select v1.mes, v1.cantidad, v2.mes, v2.cantidad from ventas v1, ventas v2 where v2.id<=v1.id


Y obtenemos

mes cantidad mes cantidad
------------------------------------------------------------------
enero 10 enero 10
febrero 6 enero 10
febrero 6 febrero 6
marzo 14 enero 10
marzo 14 febrero 6
marzo 14 marzo 14


Finalmente nos hace falta sumar estos datos traidos por v2

select v1.mes, sum(v2.cantidad) from ventas v1, ventas v2 where v2.id<=v1.id group by v1.mes 


Obteniendo finalmente lo deseado:

mes cantidad
------------------------------------------------------------------
enero 10
febrero 16
marzo 30


Como puede verse la columna id nos sirve para manejar el orden de los meses.

Si tiene alguna pregunta sobre éste artículo por favor deje un comentario y será respondido.

Descargas

No existen descargas asociadas

Comentarios

Sus comentarios son importantes.

Listado de comentarios

No hay comentarios para listar, si desea puede crear el primer comentario para este artículo.

Agregar un comentario

Debe estar identificado para agregar un comentario