Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/09/2012, 12:57
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 8 meses
Puntos: 447
Respuesta: Sumas y restas en MYSQL

Hola de nuevo Hermetik:

Tienes que tener mucho cuidado cuando se trata de hacer operaciones con agrupaciones, ya que dependiendo de como colocas los paréntesis de puede arrojar un resultado completamente distinto. Checa este script.

Supongamos que tenemos esta tabla;

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+-------+----------+
  3. | id   | coste | cantidad |
  4. +------+-------+----------+
  5. |    1 |    10 |        1 |
  6. |    1 |    15 |        2 |
  7. |    1 |    20 |        3 |
  8. |    2 |    25 |        4 |
  9. |    2 |    10 |        5 |
  10. |    2 |    15 |        6 |
  11. +------+-------+----------+
  12. 6 rows in set (0.14 sec)

Se puede observar que hay tres registros para cada id, si agruparas por este campo y quisiera obtener la multiplicación, observa que dependiendo de como pones los paréntesis y las sumas se obtiene un resultado distinto.


Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   id,
  3.     ->   SUM(coste) total_coste,
  4.     ->   SUM(cantidad) total_cantidad,
  5.     ->   SUM(coste) * cantidad uno,
  6.     ->   SUM(coste * cantidad) dos,
  7.     ->   SUM(coste) * SUM(cantidad) tres
  8.     -> FROM tabla
  9.     -> GROUP BY id;
  10. +------+-------------+----------------+------+------+------+
  11. | id   | total_coste | total_cantidad | uno  | dos  | tres |
  12. +------+-------------+----------------+------+------+------+
  13. |    1 |          45 |              6 |   45 |  100 |  270 |
  14. |    2 |          50 |             15 |  200 |  240 |  750 |
  15. +------+-------------+----------------+------+------+------+
  16. 2 rows in set (0.01 sec)

Es por eso que te decía que sin los datos y sin más información, era posible que lo que te ponía no fuera lo que realmente querías obtener. Pero si lograste resolver tu consulta bien por tí.

Saludos
Leo.