mysql - 具有多列条件的 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 是什么?
解决方案
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
推荐阅读
- react-native - 无法创建自定义 mobile-ffmpeg
- php - 从 Wordpress HTML 页面获取价值到 PHP 代码?
- c++ - 需要帮助在 Windows 上用 C++ 编译 ccfits 库
- forms - 无法读取由 $form->createView() 触发的类“App\Entity\Travel”中的属性“title”
- c++ - 如何使用“if constexpr”正确实现“operator()”,以便它与 std::generate 一起使用?
- python - 在有向(或无向)图中查找所有 st 节点切割
- python - xlsx 文件未导出 django rest 框架
- docker - docker 忽略 daemon.json 文件
- mongodb - 使用一种模型而不是另一种模型填充猫鼬作品
- docker - Docker理解