У меня есть таблица, называемая оплатой. Я просто хочу рассчитать общий платеж каждого пользователя. Он имеет payer_user_id
, payee_user_id
, amount
,....
--------------------------------------------------
| ID | payer_user_id | payee_user_id | amount | ..
--------------------------------------------------
| 1 | 100 | 1 | 1000 |
--------------------------------------------------
| 2 | 200 | 1 | 20000 |
------------------------------------------------
| 3 | 1 | 100 | 50
например, user_id = 100, имеет total_payment = 950, потому что он заплатил мне в размере 1000
а затем я заплатил ему в размере 50
. Таким образом, общая сумма платежа составляет 950
. Как запустить запрос для получения результата?
(SELECT sum(amount) FROM payment GROUP BY BYPAYER_USER_ID) -
(SELECT sum(amount) FROM payment GROUP BY PAYEE_USER_ID) total_debpt
ORDER BY total_debpt
LIMIT 10
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,payer_user_id INT NOT NULL
,payee_user_id INT NOT NULL
,amount INT NOT NULL
);
INSERT INTO my_table VALUES
(1 ,100 ,1 ,1000 ),
(2 ,200 ,1 ,20000 ),
(3 ,1 ,100 ,50 );
SELECT user_id
, SUM(amount) total
FROM
(
SELECT payer_user_id user_id, amount FROM my_table
UNION ALL
SELECT payee_user_id, amount*-1 FROM my_table
) x
GROUP
BY user_id;
+---------+--------+
| user_id | total |
+---------+--------+
| 1 | -20950 |
| 100 | 950 |
| 200 | 20000 |
+---------+--------+