首页 > 解决方案 > 具有多列条件的 SQL 分组

问题描述

我有一张如下表。GiverID 和 TakerID 都是另一个表的外键,比如 Person Table。GiverID 和 TakerID 在一行内不会相同。

ID  GiverPersonID  TakerPersonID  Amount
 1              1              3     100
 2              2              1     200
 3              2              3     400
 4              3              2     800

该表的第一行表示 ID 为 1 的人将 100 分配给 ID 为 3 的人。

我需要一个查询来获得如下结果

PersonID     TotalAmount
       1             100
       2             200
       3            -300

基本上,计算每个人的最终数量。对于ID为1的人,他给ID为3的人100,但从ID为2的人那里取200,所以他的最终金额是200-100,即100。

我读过关于旋转的文章,但我认为旋转不是正确的步骤。

计算该结果的有效 SQL 是什么?

标签: mysqlsqlaggregate-functions

解决方案


select user_id, sum(amount) from 
(
  select TakerPersonID as user_id, sum(amount) as amount
  from stack56355221
  group by 1
  union all
  select GiverPersonID, sum(-amount)
  from stack56355221
  group by 1
) as t1
group by 1

输出:

1 100 
2 200 
3 -300

推荐阅读