如何根据mysql

时间:2018-08-08 09:47:29

标签: mysql

我有一张叫付款的表。我只想计算每个用户的总付款。它具有payer_user_idpayee_user_idamount,...。

--------------------------------------------------
| 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

1 个答案:

答案 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 |
+---------+--------+