Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/02/2010, 10:15
Avatar de gnzsoloyo
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: operaciones con SUM() de dos tablas

Volvamos al principio:
Cita:
Mi problema lo redusco a lo siguiente. Una consulta donde salgan las sumas totales de un campo de una tabla "uno" agrupado por nombre, y que muestre tambien la sumas totales de otro campo "dos" agrupadas por un campo nombre.
El tema es que para hacer algo como esto debes usar un LEFT JOIN o RIGHT JOIN, según sea necesario, y no un JOIN (o la coma, que es lo mismo).
La cosa parte proque un JOIN devolverá registros comunes en los valores de los campos. Si hay más de un campo con el mismo nombre en las dos tablas, se los relacionara a todos. JOIN no hace muchas distinciones bien en ese caso y puede dar resultados irreales. Mi recomendación sería usar INNER JOIN o LEFT JOIN.
Pero hay un problema: INNER JOIN devolverá sólo los campos de las tablas que tengan el mismo valor en los campos puestos en el ON, con lo que si la primera tabla tiene algunos que no aparecen en la segunda, esos registros no se sumarán en ningun caso (ni para una ni para otra). Entonces habría que optar por LEFT JOIN o RIGHT JOIN. Pero aquí se repite el problema: si la primera de las tablas tiene menos que la otra, los registros de la otra no saldrán...
Hay dos opciones:
O hacer una consulta con dos UNION donde primero se consideren los que están en ambos, luego los que están en la primera solamente y después los que están en la segunda únicamente (muy complicado), o bien usar tres tablas (más simple): Una donde estén todos los nombres posibles, y las otras dos para hacer las sumas.

Obviamente esa solución solo tiene sentido si existe la posibilidad de que las tablas no coincidan en la cantidad de nombres distinguibles, si esto no se da, yo lo solucionaría por medio de suconsultas para cada tabla en el FROM:
Código MySQL:
Ver original
  1. SELECT nombre, suma1, suma2
  2.     (SELECT nombre SUM(campo) FROM tabla1 GROUP BY nombre) T1 INNER JOIN
  3.     (SELECT nombre SUM(campo) FROM tabla2 GROUP BY nombre)  T2 ON T1.nombre = T2.nombre
  4. GROUP BY nombre;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)