Oracle - найди разницу между столбцами по условиям - PullRequest
3 голосов
/ 02 октября 2019

Таблица с операциями:

ID | ID_CUSTOMER | AMOUNT_TRANSFER | ID_ACCOUNT_SENDER | ID_ACCOUNT_RECEIVER|

Я должен найти ID_CUSTOMER с нулевым и максимальным остатком на счетах.

Баланс - это общая разница всех переведенных AMOUNT_TRANSFER по счетам.

Я пытался найти все суммы перевода по клиенту, но не знаю, как найти разницу:

SELECT 
    ACCOUNT.ID, SUM(O.AMOUNT_TRANSFER), 
    C2.SECOND_NAME AS Фамилия, C2.FIRST_NAME 
FROM
    ACCOUNT
JOIN 
    CUSTOMER C2 on ACCOUNT.ID_CUSTOMER = C2.ID
JOIN 
    OPERATION O on ACCOUNT.ID = O.ID_ACCOUNT_RECEIVER
GROUP BY 
    ACCOUNT.ID, C2.SECOND_NAME, C2.FIRST_NAME

Пример данных:

ID  ID_CUSTOMER AMOUNT_TRANSFER ID_ACCOUNT_SENDER ID_ACCOUNT_RECEIVER
1   1   5000    1   2
2   2   3000    1   2
3   1   2000    1   2
4   3   2000    2   3
5   3   1000    3   2

, затем дляНапример,

 ID_ACCOUNT == 2 have 5000 + 3000 + 2000 + 1000 are received and 2000 are sended , total balance is 11000 - 2000 = 9000, 

далее Мне нужен баланс всех счетов (по счетам). Далее я смогу рассчитать баланс по клиентам (только JOIN и SUM) и счету с 0 и макс. (по тому же подходу)

1 Ответ

2 голосов
/ 02 октября 2019

Вы можете разделить каждый перевод для отправителя и получателя, а затем агрегировать по клиенту.

Ниже приведены итоги для всех клиентов из переводов :

select a.id_customer, sum(amount) as balance
from ((select id_account_sender as id_account,- amount_transfer as amount
       from operations o
      ) union all
      (select id_account_receiver, amount_transfer
       from operations o
      )
     ) o join
     accounts a
     on a.id = o.id_account
order by sum(amount);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...