sql >> Base de Datos >  >> RDS >> Mysql

Suma, resta y une varias columnas de la tabla mysql

Debido a que tiene múltiples transacciones, otros montos de préstamos y pagos por cliente, no puede hacer un JOIN directo. de las tablas entre sí, ya que provocará la replicación de filas, lo que dará como resultado valores incorrectos. En su lugar, SUM todos los valores dentro de cada tabla por cliente antes haciendo JOIN . Además, dado que algunos clientes no tienen entradas en cada tabla, debe usar LEFT JOIN s y COALESCE en los resultados para que las filas vacías no hagan que SUM se convierta en NULL . Esta consulta debería darte los resultados que deseas:

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

Salida (para sus datos de muestra):

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

Demostración en SQLFiddle