Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Powielanie obejmujące SUM, LEFT JOIN i GROUP BY

Tak więc pierwszym krokiem, aby zobaczyć, co się dzieje, jest usunięcie sum i wybranie kwoty transakcji i kwoty roszczenia. W ten sposób możesz zobaczyć, jakie dane są zwracane. Zobaczysz, że połączenie w dniu A/2007 będzie miało podwójną kwotę transakcji, ponieważ łączy każdy wiersz z tabelą roszczeń.

Jednym z rozwiązań jest użycie podzapytań, tak jak powiedziałeś, aby wykonać sumy oddzielnie przed dołączeniem.

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

Inne możliwe rozwiązanie, biorąc pod uwagę Twoje ograniczenia:

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

Trzecie możliwe rozwiązanie!! Ten nie wymaga żadnych podzapytań! Zobacz to 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zatrzymać uruchomione zapytanie MySQL?

  2. MySQL - Jak ZAMÓWIĆ WEDŁUG TRAFNOŚCI? Tabela INNODB

  3. MySQL WYBIERZ LIKE lub REGEXP, aby dopasować wiele słów w jednym rekordzie

  4. Funkcje daty i czasu MySQL nie istnieją

  5. Jak znajdę drugą co do wielkości pensję z tabeli pracowników?