sql >> Databáze >  >> RDS >> Mysql

Součet, odečítání a spojení více sloupců tabulky mysql

Protože máte více transakcí, jiné částky úvěru a platby na zákazníka, nemůžete provést rovnou JOIN tabulek navzájem, protože to způsobí replikaci řádků, což má za následek nesprávné hodnoty. Místo toho SUM všechny hodnoty v každé tabulce na klientské bázi před provedením JOIN . Navíc, protože někteří klienti nemají položky v každé tabulce, musíte použít LEFT JOIN s a COALESCE na výsledcích, aby prázdné řádky nezpůsobily, že se SUM stanou NULL . Tento dotaz by vám měl poskytnout požadované výsledky:

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

Výstup (pro vaše ukázková data):

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

Ukázka na SQLFiddle




  1. jak vložit datum a čas do oracle?

  2. Serializovatelná úroveň izolace

  3. Přístup odepřen uživateli 'root'@'localhost' pomocí PHPMyAdmin

  4. Jak správně udělat CREATE INDEX s SQLite