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

Sumas y restas en MYSQL

Estas en el tema de Sumas y restas en MYSQL en el foro de Mysql en Foros del Web. Hola foreros, Tengo un mini problema con una consulta MySQL y sus resultados. Os explico. La base de datos hace un recorrido por una serie ...
  #1 (permalink)  
Antiguo 20/09/2012, 11:49
 
Fecha de Ingreso: enero-2010
Mensajes: 27
Antigüedad: 14 años, 10 meses
Puntos: 2
Sumas y restas en MYSQL

Hola foreros,

Tengo un mini problema con una consulta MySQL y sus resultados. Os explico. La base de datos hace un recorrido por una serie de productos vendidos y luego muestro en pantalla un resultado tal como el total de unidades vendidas, facturación global y la suma total de costes, entre otras.

El atasco lo tengo cuando hace una suma del total del coste de todos los productos pues le indico que sume los costes multiplicado por sus unidades en cada registro pero no me da el resultado que debe salir.

Os dejo la consulta a ver si me dáis alguna idea.

Código:
mysql_select_db($database_conexion, $conexion);
$query_suma = sprintf("SELECT Sum(pedidos_productos.totalprod) AS totalventas, Sum(pedidos_productos.coste * pedidos_productos.cantidad) AS totalcoste, Sum(pedidos_productos.cantidad) AS totalcantidad FROM pedidos_productos WHERE id_producto = %s", $colname_suma);
El problema anda aquí:

Código:
Sum(pedidos_productos.coste * pedidos_productos.cantidad) AS totalcoste
Gracias adelantadas.
  #2 (permalink)  
Antiguo 20/09/2012, 12:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Sumas y restas en MYSQL

Hola Hermetik:

A reserva de que nos digas cómo es la estructura de tu tabla y cómo tienes organizados tus datos, es decir que nos pongas algunos datos de ejemplo, podrías simplemente tratar de hacer esto:

Código:
.....
SUM(pedidos_productos.coste) * SUM(pedidos_productos.cantidad) AS totalcoste
.....
Haz la prueba y nos comentas y si continuas con problemas postea el CREATE que utilizaste para la tabla y pon algunos datos de ejemplo para hacer pruebas.

Saludos
Leo.
  #3 (permalink)  
Antiguo 20/09/2012, 12:30
 
Fecha de Ingreso: enero-2010
Mensajes: 27
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Sumas y restas en MYSQL

Hola Leo,

Gracias por tu rápida respuesta.

Al final lo he logrado de esta forma:

Sum(pedidos_productos.coste)*(pedidos_productos.ca ntidad) AS totalcoste

Era una cuestión de paréntesis...

A veces la respuesta está en las cosas más sencillas...

Saludos!!
  #4 (permalink)  
Antiguo 20/09/2012, 12:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 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.
  #5 (permalink)  
Antiguo 20/09/2012, 13:06
 
Fecha de Ingreso: enero-2010
Mensajes: 27
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Sumas y restas en MYSQL

Fantástico Leo,

Voy a practicar con esto que propones.

Muchas gracias!!
  #6 (permalink)  
Antiguo 20/09/2012, 13:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Sumas y restas en MYSQL

Para que quede un poco más claro como está funcionando cada uno de los resultados sería así:

Código:
UNO --> SUM(coste) * cantidad

id = 1 --> (10+15+20) * 1 = 45
id = 2 --> (25+10+15) * 4 = 200
es decir, al no agrupar la CANTIDAD, suma solo la columna de costos y multiplica POR EL PRIMER VALOR QUE ENCUENTRA, en este caso el 1 para el id = 1 y el 4 para el id = 2

Código:
DOS --> SUM(coste * cantidad) dos,
id = 1 --> (10*1) + (15*2) + (20*3) = 100
id = 2 --> (25*4) + (10*5) + (15*6) = 240
Código:
TRES --> SUM(coste) * SUM(cantidad)
id = 1 --> (10 + 15 + 20) * (1 + 2 + 3) = 270
id = 2 --> (25 + 10 + 15) * (4 + 5 + 6) = 750
A partir de lo que realmente quieres hacer es la forma en que debes colocar los paréntesis y las sumas.

saludos
Leo.
  #7 (permalink)  
Antiguo 20/09/2012, 15:19
 
Fecha de Ingreso: enero-2010
Mensajes: 27
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: Sumas y restas en MYSQL

Gracias de nuevo,

Ahora me ha surgido un nuevo problema.

Si pongo un valor negativo, por ejemplo en el coste (-10) no me hace la resta, sino que pasa como un número positivo ¿qué puede ser?

Estoy usando tu ejemplo DOS

Código:
SUM(coste * cantidad)
Saludos!
  #8 (permalink)  
Antiguo 20/09/2012, 17:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Sumas y restas en MYSQL

No es la operación aritmética, ni el SQL:
Código MySQL:
Ver original
  1. mysql> SELECT (-10*45) RESULTADO;
  2. +-----------+
  3. | RESULTADO |
  4. +-----------+
  5. |      -450 |
  6. +-----------+
  7. 1 row in set (0.09 sec)
El problema debe venir por otro lado, como la suma de datos (hay que revisar todos los datos), o bien la forma de manipularlos (con signo o sin signo).
Sin más detalle, no se puede decir.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: restas, select, sql, sumas
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 17:36.