PostgreSQL查询中的分组差异

时间:2018-11-22 13:57:36

标签: postgresql aggregate-functions

这是一个非常基本的问题,更多的是关于聚集的“差异”函数的存在,或者与PostgreSQL中的等效函数有关。如果我要查询以下结构:

id    | value
45572 | 802033.9692
45572 | 395904.2332
45573 | 750143.7240
45573 | 114797.8068
45574 | 357421.6152
45574 | 42223.3203
45576 | 13486.1753
45576 | 961121.1070
45571 | 289127.9147
45571 | 662589.0504
45579 | 900874.5207
45579 | 235575.6564

使用GROUP BY汇总每个“ id”的“值”列自然是一件简单的事

select id, sum(value)
  from ...
 where ...
 group by id
 order by id

我的问题是,是否有一些等效的聚合函数来查找相对于每对ID的“值”行中的绝对差。在此示例中,我正在寻找的结果看起来像

id    | value
45572 | 406129.736
45573 | 635345.9172
45574 | 315198.2949
45576 | 947634.9317
45571 | 373461.1357
45579 | 665298.8643

在这种情况下,我保证每个不同的id值中将恰好有2个。我应该在这里使用的窗口功能吗?如果是这样,我不确定从哪里开始。朝着最有效的方法正确方向指向的指针将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以在此处使用MIN/MAX

SELECT
    id,
    MAX(value) - MIN(value) AS diff
FROM yourTable
GROUP BY
    id;

假设表中的每个id都有一对记录,那么上面的查询应该为您提供所需的输出。