sql >> Database >  >> RDS >> Mysql

Mysql join en som is een verdubbeling van het resultaat

Het is een verdubbeling omdat de titel wordt herhaald in fonds- en inkomstentabellen. Dit vermenigvuldigt het aantal records waarmee het overeenkomt. Dit is vrij eenvoudig te zien als u de geaggregeerde functies verwijdert en naar de onbewerkte gegevens kijkt. Zie hier

De manier om dit te omzeilen is door inline weergaven van uw aggregaten te maken en mee te doen aan die resultaten.

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 

uitvoer

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

demo



  1. Adminer - Een geavanceerde webgebaseerde databasebeheertool voor Linux

  2. CSV ontleden en exporteren naar Mysql-database in Grails

  3. Laravel Migratietabel bestaat al, maar ik wil nieuwe toevoegen, niet de oudere

  4. PostgreSQL-tekst [][]-type en Java-type toewijzen