我有一张叫付款的表。我只想计算每个用户的总付款。它具有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
答案 0 :(得分:1)
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 |
+---------+--------+