Как получить баланс каждого участника из трансферной таблицы, используя один запрос выбора? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть таблица перевода, которая выглядит следующим образом:

передача

enter image description here

Я бы хотелаполучить баланс каждого участника из трансферной таблицы.

Вывод запроса должен выглядеть следующим образом:

output

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вы можете попробовать что-то вроде этого:

select sender,(select sum(amount)
               from table1 b
               where b.recipient=a.sender)-sum(amount)
from table1 a
group by sender

Где вы получаете для каждого отправителя сумму суммы, которую он дал как отправителя минус сумма суммы, которую он получил как получателя.

РЕДАКТИРОВАТЬ Кто-то сказал мне, что сумма была инвертирована, и он был прав, поэтому я изменил порядок операндов

0 голосов
/ 26 ноября 2018

Использование UNION ALL и group by

select person, sum(b)
from
(
  select sender person, -amount b from transfer
  union all
  select recipient person, amount b from transfer
) t 
group by person

Таким образом, каждая транзакция рассматривается как уменьшение и увеличение баланса, если лицо является отправителем и получателем соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...