sql >> Database >  >> RDS >> Mysql

Duplicatie met SUM, LEFT JOIN en GROUP BY

Dus de eerste stap om te zien wat er gebeurt, is om de SOM's te verwijderen en gewoon het transactiebedrag en het claimbedrag te selecteren. Op die manier kunt u zien welke gegevens worden geretourneerd. U zult zien dat de join op A/2007 het transactiebedrag twee keer zal hebben, aangezien elke rij wordt toegevoegd aan de claimtabel.

Een oplossing is om subquery's te gebruiken, zoals je al zei, om de SOM's afzonderlijk te doen voordat je lid wordt.

SELECT 
   Transactions.Customer,
   Transactions.Year,
   SumTransaction,
   SumClaim
FROM (
      select Customer, Year, sum(Transaction Amount) SumTransaction 
      from Transactions
      group by Customer, Year
   ) Transactions
   LEFT JOIN (
      select Customer, Year, sum(Claim Amount) sumClaim 
      from Claims
      group by Customer, Year
   ) Claims
   ON Claims.Customer = Transactions.Customer
      AND Transactions.Year = Claims.Year

Een andere mogelijke oplossing gezien uw beperkingen:

SELECT 
   Transactions.Customer,
   Transactions.Year,
   SUM(Transaction Amount),
   (SELECT SUM(Claim Amount) from Claims where Claims.Customer = Transactions.Customer and Claims.Year = Transactions.Year)
FROM 
   Transactions
GROUP BY
   Customer, Year

Derde mogelijke oplossing!! Deze vereist geen subquery's! Zie deze SQL Fiddle

select
    t.Customer,
    t.Year,
    sum(distinct t.Amount),
    sum(c.Amount)
from
    Transactions t
    left join Claims c
        on  t.Customer = c.Customer
            and t.Year = c.year
group by
    t.Customer,
    t.Year


  1. Illegale mix van sorteerfouten in MySql

  2. Selecteer query met IN() en zonder enige sortering

  3. Hoge beschikbaarheid met een klein budget - Een MySQL Galera-cluster met minimaal twee knooppunten implementeren

  4. XAMPP Werkt erg traag met PHP/MySQL