sql >> Databasteknik >  >> RDS >> Mysql

Mysql gå med och summan fördubblar resultatet

Dess fördubbling eftersom du har titeln som upprepas i fond- och intäktstabeller. Detta multiplicerar antalet poster där det matchar. Detta är ganska lätt att se om du tar bort de aggregerade funktionerna och tittar på rådata. Se här

Sättet att komma runt detta är att skapa integrerade vyer av dina aggregat och gå med i dessa resultat.

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 

utdata

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

demo



  1. Tips för att migrera från HAProxy till ProxySQL

  2. Skapa en Inline Table-Valued Function (ITVF) i SQL Server

  3. Hur kan jag få fram antalet poster som påverkas av en lagrad procedur?

  4. SQL Server Service Broker konversationsgrupper