Mysql
 sql >> Database >  >> RDS >> Mysql

Somma, sottrazione e unione di più colonne della tabella MySQL

Poiché hai più transazioni, altri importi di prestito e pagamenti per cliente, non puoi fare un semplice JOIN delle tabelle tra loro in quanto causerà la replica delle righe, con conseguenti valori errati. Invece, SUM tutti i valori all'interno di ogni tabella su base client prima facendo il JOIN . Inoltre, poiché alcuni client non hanno voci in ogni tabella, devi utilizzare LEFT JOIN se COALESCE sui risultati in modo che le righe vuote non facciano diventare SUM NULL . Questa query dovrebbe darti i risultati desiderati:

SELECT c.id, c.name,
       COALESCE(t.transactions, 0) + COALESCE(o.amounts, 0) - COALESCE(p.payments, 0) AS amount
FROM client c
LEFT JOIN (SELECT id, SUM(load_amount) + SUM(additional) AS transactions
           FROM transaction
           GROUP BY id) t on t.id = c.id
LEFT JOIN (SELECT id, SUM(amount) AS amounts
           FROM other_loan
           GROUP BY id) o ON o.id = c.id
LEFT JOIN (SELECT id, SUM(payment_amount) AS payments
           FROM payment
           GROUP BY id) p ON p.id = c.id
GROUP BY c.id

Output (per i tuoi dati di esempio):

id  name        amount
1   Robin       8718
2   Cinderella  21
3   Leomar      0

Demo su SQLFiddle