繁体   English   中英

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

Calculate differences between rows while grouping with SQL

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个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);
2 个回复

您可以使用两个子选择来对每个方向的运动求和,然后对这两个子查询的结果进行求和并求和:

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

这样做你需要的吗? 我没有要测试的Oracle数据库,所以我希望分组表达式的规则与MS SQL Server相同

SELECT     
 CASE WHEN source < target THEN source ELSE target END AS source,
 CASE WHEN source < target THEN target ELSE source END AS target,
 SUM(CASE WHEN source < target THEN units ELSE -units END) AS Diff, 
    model
FROM  movements
GROUP BY
 CASE WHEN source < target THEN source ELSE target END,
 CASE WHEN source < target THEN target ELSE source END,
    model
1 按行之间的差异对 SQL 进行分组?

我正在取几个数据点的最小值和最大值,但其中一些数据点让患者在不同的日子前往相同的地点。 有没有办法添加一个索引或代码,根据 order by 语句或类似的东西将它们区分为单独的组? 我想将它们区分为单独的组(通过分离患者离开一个位置,去了一个新的位置,然后返回到原来的位置(在分组方面将其视为一个新位 ...

2 sql计算2行之间的差异

我正在寻找一种方法来比较同一个表中2行之间的差异。 从我在这里找到的( 如何获得列字段的两行之间的差异? )这几乎是我想要的。 我做了以下代码: 我的问题是,我正在计算的结果从第1行而不是第2行开始。 下面是我得到的结果: 而我希望它是这样的: 我的做法有什么问 ...

4 如何计算pandas中分组行之间的差异

我有一个包含每篇文章查看次数的数据集。 我正在尝试计算每个故事每天的额外观看次数,以便我可以绘制它。 我设法只为一个故事做这件事。 我得到了正确的结果。 有没有办法一次性完成所有故事? 数据集 谢谢,尼古拉斯 ...

5 计算分组行之间的最大差异

我有以下数据,其中按年龄分类(年龄从大到小): 我想为每个家庭计算连续年龄之间的最大年龄差异。 因此,此示例对于家庭1、2和3连续给出值5(= 25-20),16(= 32-16)和32(= 42-10)。 我可以使用很多合并(例如,提取人员1,与人员2的提取,以此类推)进行合并 ...

2015-02-12 09:03:09 5 174   sas
7 如何用SQL计算行之间的差异?

我有一个任务是使用一个新列创建一个表,其中包含当前行和下一行中的年龄之间的差异。 年龄应按降序排列。 是否可以使用SQL? 我不确切知道我应该使用什么sql,而且在任务中没有指定。 我明白括号内应该有东西 我有“动物”这个表 结果表应如下所示: ...

8 ACCESS / SQL:计算行之间的差异(不是日期)

我在这里浏览了所有问题,但没有找到适合我的情况的问题。 我试图写一个查询,将输出行之间的差异 这是一张桌子: 它实际上是通过查询获得的,并且顺序是(项,周期) 这是我希望查询给我的: 我完全不知道如何进行SQL。 可能吗? 还是我必须编写一个函数? ...

9 带分组依据的两行之间的SQL差异

表:原始数据 结果: 计算:首先按设备和时间分组,然后找到该分组的最大值。 然后在组中找到同一设备的上一记录的最大值,然后减去这两个最大值 按结果分组的第一条记录为12:50:00,“ a”在12:50组的“ a”最大值= 900,“ a”(或列表中的下一条)的上一条记录 ...

10 使用Case语句时计算分组计数

使用SQL Server 2012-我正在尝试从数据库中完成对不同实体的计数,按其国家和地区以及它们所属的公司类型进行分组。 后一部分是问题-由于有太多的“类型”,我试图将它们分为3类:公共的,私有的,并使用case语句将所有其他所有内容归为“其他”。 该查询产生了我想要的输出,但是我只是无法获取 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM