Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Restando la suma de 2 columnas

Estas en el tema de Restando la suma de 2 columnas en el foro de Mysql en Foros del Web. Hola tengo mi tabla Movimientos de productos Movimientos idVenta - idProducto - tipoMovimiento - coste 1 1 venta 5500 2 1 compra 4500 Como puedo ...
  #1 (permalink)  
Antiguo 30/05/2012, 08:03
Avatar de nes24  
Fecha de Ingreso: julio-2005
Mensajes: 746
Antigüedad: 17 años, 1 mes
Puntos: 3
Restando la suma de 2 columnas

Hola tengo mi tabla Movimientos de productos

Movimientos
idVenta - idProducto - tipoMovimiento - coste
1 1 venta 5500
2 1 compra 4500

Como puedo SUMAR U OBTENER el coste total vendido y restarlo del coste total Comprado.
__________________
No hay nada que foros del web no sepa!!!!

Peca tanto quien presume de su belleza como de su inteligencia, ya que la brevedad de la vida aunque distorcionada siempre estara presente.
  #2 (permalink)  
Antiguo 30/05/2012, 10:04
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 13 años, 6 meses
Puntos: 360
Respuesta: Restando la suma de 2 columnas

Me imagino algo así:

Código MySQL:
Ver original
  1. SELECT t1.comprado-t2.vendido
  2. (SELECT SUM(coste) comprado FROM Movimientos WHERE tipoMovimiento = 'compra' ) t1,
  3. (SELECT SUM(coste) venta FROM Movimientos WHERE tipoMovimiento = 'venta' ) t2

No lo he probado
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/05/2012, 10:28
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 7 meses
Puntos: 447
Respuesta: Restando la suma de 2 columnas

Hola Nes24.

Esta sería la idea... siguiendo un poco la lógica del compañero Huesos52, aunque utilizando JOIN's:

Considerando que un producto tenga una y solo una venta y una y solo una compra podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM movimientos;
  2. +---------+------------+----------------+-------+
  3. | idVenta | idProducto | tipoMovimiento | coste |
  4. +---------+------------+----------------+-------+
  5. |       1 |          1 | venta          |  5500 |
  6. |       2 |          1 | compra         |  4500 |
  7. |       3 |          4 | venta          |  1000 |
  8. |       4 |          4 | compra         |   800 |
  9. +---------+------------+----------------+-------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT m.idProducto, v.coste, c.coste, v.coste - c.coste ganancia
  13.     -> FROM movimientos m
  14.     -> INNER JOIN movimientos v ON m.idProducto = v.idProducto
  15.     -> AND v.tipoMovimiento = 'venta'
  16.     -> INNER JOIN movimientos c ON m.idProducto = c.idProducto
  17.     -> AND c.tipoMovimiento = 'compra'
  18.     -> GROUP BY m.idProducto, v.idProducto, c.idProducto;
  19. +------------+-------+-------+----------+
  20. | idProducto | coste | coste | ganancia |
  21. +------------+-------+-------+----------+
  22. |          1 |  5500 |  4500 |     1000 |
  23. |          4 |  1000 |   800 |      200 |
  24. +------------+-------+-------+----------+
  25. 2 rows in set (0.00 sec)

Considerando que un producto pueda tener n ventas y m compras, podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> SELECT m.idProducto, v.coste, c.coste, v.coste - c.coste ganancia
  2.     -> FROM movimientos m
  3.     -> INNER JOIN
  4.     -> (SELECT idProducto, SUM(coste) coste FROM movimientos
  5.     -> WHERE tipoMovimiento = 'venta'
  6.     -> GROUP BY idProducto) v ON m.idProducto = v.idProducto
  7.     -> INNER JOIN
  8.     -> (SELECT idProducto, SUM(coste) coste FROM movimientos
  9.     -> WHERE tipoMovimiento = 'compra'
  10.     -> GROUP BY idProducto) c ON m.idProducto = c.idProducto
  11.     -> GROUP BY m.idProducto;
  12. +------------+-------+-------+----------+
  13. | idProducto | coste | coste | ganancia |
  14. +------------+-------+-------+----------+
  15. |          1 |  5500 |  4500 |     1000 |
  16. |          4 |  1000 |   800 |      200 |
  17. +------------+-------+-------+----------+
  18. 2 rows in set (0.01 sec)

Saludos
Leo.

Etiquetas: columnas, suma, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:54.