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

Beberapa Kiri Gabung dengan jumlah

Masalahnya mungkin fakta karena hasil Cartesian dari data dan penjumlahan Anda terjadi. Hanya untuk memperjelas, ini adalah pertanyaan sederhana... Saya tahu saya tidak memiliki semuanya, atau menggabungkan kolom dengan sempurna, ini hanya untuk klarifikasi.

JUGA, SAYA TAHU Saya telah menyingkat kolom dan alias untuk menyederhanakan membaca dan memahami konsep dari apa yang mungkin Anda hadapi.

Select
      t1.yr,
      sum( t2.Amt ) as AmtChange
   FROM 
      budget AS t1
         LEFT JOIN Budget_Changes AS t2
            on t1.yr = t2.Yr

Pada akhirnya, tidak masalah... untuk tahun tertentu, Anda akan mendapatkan total dari tabel kedua. Ada banyak record pada tabel 2. Contoh:Data

Budget
Yr
2013
2014

Budget_Changes
Yr    Amt
2013  10
2013  20
2013  30
2014  40
2014  50

Your results would be
Yr    AmtChange
2013  60
2014  90

Kami mungkin setuju pada saat ini... Sekarang, masukkan tabel lain bahwa per tahun (atau apa pun), itu juga memiliki banyak catatan per tahun...

Change_Orders
Yr     COAmt
2013   100
2013   120
2014   200
2014   220

Dan Anda menambahkan ini sebagai gabungan kiri sekunder ke kueri Anda, seperti

Select
      t1.yr,
      sum( t2.Amt ) as AmtChange,
      sum( t3.COAmt ) as COAmtChange
   FROM 
      budget AS t1
         LEFT JOIN Budget_Changes AS t2
            on t1.yr = t2.Yr
         LEFT JOIN Change_Orders AS t3
            on t1.yr = t3.Yr


Your might expect the results to be
Yr    AmtChange  COChangeAmt
2013  60         220
2014  90         420

Namun, karena ini adalah hasil Cartesian... beberapa baris per setiap gabungan mengambil hasil KALI setiap entri yang ada di tabel lain... sesuatu seperti

Yr    AmtChange  COChangeAmt
2013  120         440
2014  180         840

Untuk memperbaikinya, setiap tabel individu tempat Anda mendapatkan subtotal harus ditangani sendiri, dan dikelompokkan berdasarkan tahun sendiri sehingga subset hanya mengembalikan satu baris per konteks data. Sesuatu seperti

Select
      t1.yr,
      t2.AmtChange,
      t3.COAmtChange
   FROM 
      budget AS t1
         LEFT JOIN ( select BC.Yr, sum( BC.Amt ) as AmtChange
                        from Budget_Changes BC
                        group by BC.Yr ) t2
            on t1.yr = t2.Yr
         LEFT JOIN ( select CO.Yr, sum( CO.COAmt ) as COAmtChange
                        from Change_Orders CO
                        group by CO.Yr ) AS t3
            on t1.yr = t3.Yr

Jadi, sub-kueri masing-masing hanya akan mengembalikan 1 catatan untuk tahun terkait yang digabungkan dan dengan demikian mencegah duplikat dalam jumlah sum().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat terhubung ke database mysql dengan play-slick 1.0.1/slick 3.0 :kesalahan konfigurasi

  2. Menyimpan gambar yang diunggah pengguna secara efisien pada sistem file

  3. Ekstensi mysqli tidak ada, phpmyadmin tidak berfungsi

  4. Bagaimana menemukan Indeks yang Hilang di MySQL?

  5. Hitung jumlah baris dalam golang