Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql jointure et la somme double le résultat

Il double parce que vous avez un titre répété dans les tableaux de fonds et de revenus. Cela multiplie le nombre d'enregistrements où il correspond. C'est assez facile à voir si vous supprimez les fonctions d'agrégation et regardez les données brutes. Voir ici

La façon de contourner ce problème est de créer des vues en ligne de vos agrégats et de vous joindre à ces résultats.

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 

sortie

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

démo