Mysql
 sql >> Base de données >  >> RDS >> Mysql

Somme, soustraction et jointure de plusieurs colonnes de table mysql

Parce que vous avez plusieurs transactions, d'autres montants de prêt et paiements par client, vous ne pouvez pas faire un JOIN direct des tables les unes aux autres car cela entraînera la réplication des lignes, ce qui entraînera des valeurs incorrectes. Au lieu de cela, nous SUM toutes les valeurs de chaque table sur une base client avant faire le JOIN . De plus, étant donné que certains clients n'ont pas d'entrées dans chaque table, vous devez utiliser LEFT JOIN s et COALESCE sur les résultats afin que les lignes vides ne fassent pas devenir les SOMMES NULL . Cette requête devrait vous donner les résultats souhaités :

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

Sortie (pour vos exemples de données) :

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

Démo sur SQLFiddle