уменьшать результат двух субконсультаций MySql

У меня есть 3 подмостков в моей базе данных, которые являются счетами, доходом, затратами. Мне нравился бы иметь данную сумму дохода и затрат специфический счет, и потом получать различие этих сумм. Это сжатый пример структуры подмостков:

+--------------+
|   accounts   |
|--------------|
| id           |
| name         |
+--------------+

+--------------+
|   income     |
|--------------|
| id           |
| amount       |
| account_id   |
+--------------+

+--------------+
|   expense    |
|--------------|
| id           |
| amount       |
| account_id   |
+--------------+

И это моя настоящая консультация:

select (t1.amount - t2.amount) as subtraction
from accounts a
inner join (
  select account_id, COALESCE(sum(amount), 0) as amount
  from income 
  where account_id = 4
) t1 on a.id = t1.account_id
inner join (
  select account_id, COALESCE(sum(amount), 0) as amount
  from expense 
  where account_id = 4
) t2 on a.id = t2.account_id

это функционирует только, когда у меня есть реестры в обоих подмостках, часто только у меня будут движения дохода и мне хотелось бы получать этот результат, тогда, как я должен располагать в порядке мою консультацию?

3
задан 09.10.2019, 04:08
1 ответ

PodrГ-схвати:

  • Создавать суб-консультацию, чтобы получать общее количество incomes и expenses для каждых account.
  • Использовать IFNULL для случая, в котором какая-либо из этих - null нет реестров )
  • , В конце концов podrГ-схвати уменьшать общее количество обоих результатов.

Пример:

SELECT
  IFNULL((
    SELECT SUM(amount)
    FROM income AS i
    WHERE i.account_id = a.id
  ), 0) AS incomes,
  IFNULL((
    SELECT SUM(amount)
    FROM expense AS e
    WHERE e.account_id = a.id
  ), 0) AS expenses,
  ((SELECT incomes) - (SELECT expenses)) AS balance
FROM accounts AS a

Demo

Наблюдения:

  • , Если ты нуждаешься в том, чтобы получить эти результаты одинокий для счета 4, только ты нуждаешься в том, чтобы добавить WHERE a.id = 4
  • , Если ты не нуждаешься в том, чтобы узнать общее количество incomes и expenses, тогда podrГ-туз прямо уменьшить обе суб-консультации .
0
ответ дан 01.12.2019, 15:51