gpt4 book ai didi

sql - 使用 SQL 分组时计算行之间的差异

转载 作者:行者123 更新时间:2023-11-29 11:42:14 26 4
gpt4 key购买 nike

我有一个 postgresql 表,其中包含仓库之间不同项目(模型)的移动。

例如,以下记录表示已从仓库 1 向仓库 2 发送了 5 台型号 1:

source target model units
------ ------ ----- -----
1 2 1 5

我正在尝试构建一个 SQL 查询,以获取按模型分组的发送和接收单位之间的差异。再举个例子:

source target model units
------ ------ ----- -----
1 2 1 5 -- 5 sent from 1 to 2
1 2 2 1
2 1 1 2 -- 2 sent from 2 to 1
2 1 1 1 -- 1 more sent from 2 to 1

结果应该是:

source target model diff
------ ------ ----- ----
1 2 1 2 -- 5 sent minus 3 received
1 2 2 1

我想知道这是否可能使用单个 SQL 查询

这是建表脚本和一些数据,以防万一有人想尝试:

CREATE TEMP TABLE movements
(
source INTEGER,
target INTEGER,
model INTEGER,
units INTEGER
);

insert into movements values (1,2,1,5);
insert into movements values (1,2,2,1);
insert into movements values (2,1,1,2);
insert into movements values (2,1,1,1);

最佳答案

您可以使用两个子查询来完成此操作,这两个子查询对每个方向的移动求和,然后合并并对这两个子查询的结果求和:

SELECT source, target, model, SUM(units)
FROM (
SELECT source, target, model, SUM(units) AS units
FROM movements
WHERE source < target
GROUP BY source, target, model
UNION ALL
SELECT target, source, model, SUM(-units) AS units
FROM movements
WHERE source > target
GROUP BY source, target, model
) T1
GROUP BY source, target, model

关于sql - 使用 SQL 分组时计算行之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com