У меня есть 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
это функционирует только, когда у меня есть реестры в обоих подмостках, часто только у меня будут движения дохода и мне хотелось бы получать этот результат, тогда, как я должен располагать в порядке мою консультацию?
PodrГ-схвати:
incomes
и expenses
для каждых account
. IFNULL
для случая, в котором какая-либо из этих - null
(у нет реестров ) 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
4
, только ты нуждаешься в том, чтобы добавить WHERE a.id = 4
incomes
и expenses
, тогда podrГ-туз прямо уменьшить обе суб-консультации .