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

menggabungkan hasil query mysql SUM() menggunakan inner join

Pertama membangun jumlah, kemudian bergabung. Seperti ini:

SELECT i.uid
      ,i.date
      ,i.v_in
      ,COALESCE(o.v_out, 0) AS v_out
      ,(i.v_in - COALESCE(o.v_out, 0)) AS balance
FROM (
    SELECT date
          ,uid
          ,SUM(value_in) AS v_in
    FROM   table1
    GROUP  BY 1,2
    ) i
LEFT JOIN (
    SELECT date
          ,uid
          ,SUM(value_out) AS v_out
    FROM   table2
    GROUP  BY 1,2
    ) o USING (date, uid)

Cara Anda memilikinya, setiap value_in akan digabungkan dengan setiap value_out yang cocok , sehingga mengalikan angka. Anda harus menggabungkan terlebih dahulu dan kemudian Anda bergabung dengan satu in-sum dengan satu out-sum dan semuanya asyik. Atau itu?

Apa yang terjadi jika tidak ada value_in atau value_out untuk (date, uid) yang diberikan ? Atau hanya value_in Atau cukup value_out ? Permintaan Anda akan gagal.

Saya meningkatkan dengan menggunakan LEFT JOIN bukannya [INNER] JOIN , tetapi yang Anda inginkan adalah FULL OUTER JOIN - salah satu fitur yang hilang di MySQL.

Anda dapat memberikan daftar hari dalam tabel terpisah dan LEFT JOIN kedua tabel untuk itu, atau Anda dapat mengatasi fitur yang hilang dengan dua kali LEFT JOIN dan UNION . Lihat di sini sebagai contoh .

Atau Anda dapat melipatgandakan value_out oleh -1 Gabungkan kedua tabel dan buat satu penjumlahan.

Tapi Anda tetap tidak akan mendapatkan baris selama sehari tanpa value_in atau value_out , yang melanggar deskripsi Anda.

Jadi, satu-satunya solusi bersih adalah memiliki tabel dengan semua (date, uid) yang Anda inginkan dalam hasil dan LEFT JOIN jumlah table1 dan table2 untuk itu, atau UNION ALL ketiganya (negatif table2 ) dalam sub-pilihan lalu jumlahkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan elemen unik/berbeda di dalam array JSON di MySQL 5.7

  2. Melewati array dari PHP ke Javascript menggunakan JQuery &JSON

  3. Beberapa sisipan dengan PDO

  4. Setel hasil kueri MySQL ke dalam JComboBox

  5. Basis Data Default MySQL