Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Suma, odejmowanie i łączenie wielu kolumn tabeli mysql

Ponieważ masz wiele transakcji, inne kwoty pożyczek i płatności na klienta, nie możesz wykonać prostego JOIN tabel do siebie, ponieważ spowoduje to replikację wierszy, co skutkuje nieprawidłowymi wartościami. Zamiast tego SUM wszystkie wartości w każdej tabeli na podstawie klienta przed wykonując JOIN . Dodatkowo, ponieważ niektórzy klienci nie mają wpisów w każdej tabeli, musisz użyć LEFT JOIN s i COALESCE na wynikach, aby puste wiersze nie powodowały, że SUM stają się NULL . To zapytanie powinno dać pożądane wyniki:

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

Dane wyjściowe (dla przykładowych danych):

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

Demo na SQLFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmienna zdefiniowana przez użytkownika jako alias MySQL v8.0 nie działa

  2. Zależne rozwijane pole CakePHP 3

  3. Wybierz rekordy z dzisiaj, w tym tygodniu, w tym miesiącu php mysql

  4. Wstaw, zaktualizuj, usuń wiersze jtable posiadające dane mysql

  5. Połącz się z MySQL przez SSH za pomocą Javy