Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql Join und Summe verdoppelt das Ergebnis

Es verdoppelt sich, weil Sie Titel in Fonds- und Ertragstabellen wiederholen. Dies multipliziert die Anzahl der Datensätze, bei denen es übereinstimmt. Dies ist ziemlich einfach zu erkennen, wenn Sie die Aggregatfunktionen entfernen und sich die Rohdaten ansehen. Siehe hier

Sie können dies umgehen, indem Sie Inline-Ansichten Ihrer Aggregate erstellen und sich an diesen Ergebnissen beteiligen.

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 

Ausgabe

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

Demo