Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Duplikasi yang melibatkan SUM, LEFT JOIN dan GROUP BY

Jadi langkah pertama untuk melihat apa yang terjadi adalah menghapus SUM dan cukup pilih jumlah transaksi dan jumlah klaim. Dengan begitu Anda bisa melihat data apa yang dikembalikan. Anda akan melihat bahwa bergabung pada A/2007 akan memiliki jumlah transaksi dua kali, karena menggabungkan setiap baris ke tabel klaim.

Salah satu solusinya adalah menggunakan subkueri, seperti yang Anda katakan, untuk melakukan SUM secara terpisah sebelum bergabung.

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

Solusi lain yang mungkin dengan batasan Anda:

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

Solusi ketiga yang mungkin!! Yang ini tidak memerlukan subquery apa pun! Lihat 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. MySQL:Masukkan catatan jika tidak ada di tabel

  2. Hapus Kunci Utama di MySQL

  3. Memilih semua catatan dari satu tahun yang lalu sampai sekarang

  4. Kesalahan saat mencoba menginstal aplikasi dengan permata mysql2

  5. MySQL DATEDIFF() vs TIMEDIFF():Apa Bedanya?