sql >> Base de Datos >  >> RDS >> Mysql

Mysql join y sum está duplicando el resultado

Se duplica porque tiene el título repetido en las tablas de fondos e ingresos. Esto multiplica el número de registros donde coincide. Esto es bastante fácil de ver si elimina las funciones agregadas y observa los datos sin procesar. Ver aquí

La forma de evitar esto es crear vistas en línea de sus agregados y unirse a esos resultados.

SELECT R.title_id, 
       R.revenue, 
       R.cost, 
       F.interest 
FROM   (SELECT title_id, 
               Sum(revenue) revenue, 
               Sum(cost)    cost 
        FROM   revenue 
        GROUP  BY revenue.title_id) r 
       LEFT JOIN (SELECT title_id, 
                         Sum(interest) interest 
                  FROM   fund 
                  GROUP  BY title_id) f 
              ON r.title_id = F.title_id 

salida

| TITLE_ID | REVENUE | COST | INTEREST |
----------------------------------------
|        1 |      30 |   11 |       30 |
|        2 |      30 |   11 |       30 |
|        3 |      30 |   11 |       30 |
|        4 |      30 |   11 |       30 |

demostración