Mysql
 sql >> база данни >  >> RDS >> Mysql

Сумиране, изваждане и свързване на множество колони на mysql таблица

Тъй като имате множество транзакции, други суми на заеми и плащания на клиент, не можете да направите направо JOIN от таблиците една към друга, тъй като това ще причини репликация на редове, което ще доведе до неправилни стойности. Вместо това ние SUM всички стойности във всяка таблица на клиентска основа преди извършване на JOIN . Освен това, тъй като някои клиенти нямат записи във всяка таблица, трябва да използвате LEFT JOIN s и COALESCE върху резултатите, така че празните редове да не причиняват SUM да станат NULL . Тази заявка трябва да ви даде резултатите, които искате:

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

Изход (за вашите примерни данни):

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

Демо на 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. връзка на MATLAB 7.0 и MYSQL

  2. MySQL Spatial CONTINS показва грешен резултат

  3. как да "заредя файл с данни" на Amazon RDS?

  4. Използване на променлива в клауза LIMIT в MySQL

  5. Наистина ли си струва да се нормализира начинът на Toxi? ( 3NF )