可以使用(汇总)函数来定义列吗?

时间:2019-04-15 13:09:20

标签: postgresql calculated-columns postgresql-9.6

假设一个这样的表:

a | b | total
--|---|------
1 | 2 |  3
4 | 7 | 11
…

CREATE TEMPORARY TABLE summedup (
    a double precision DEFAULT 0
  , b double precision DEFAULT 0
  --, total double precision
);
INSERT INTO summedup (a, b) VALUES (1, 2);
INSERT INTO summedup (a, b) VALUES (4, 7);

SELECT a, b, a + b as total FROM summedup;

对SELECT的前两列进行汇总很容易。

但是Postgres(9.6)是否还支持将total定义为其他两列之和的功能?如果是这样:

  • 语法是什么?
  • 这种类型的操作叫什么(聚合通常将单元格汇总为多行而不是列。)

2 个答案:

答案 0 :(得分:3)

您要查找的内容通常称为“计算列”。

Postgres 9.6不支持该功能(Postgres 12-将于2019年第四季度发布-will)。

但是对于这样一个简单的总和,我不会费心存储多余的信息。

如果不想重复该表达式,请创建一个视图。

答案 1 :(得分:0)

我认为您想要的是一个视图。

CREATE VIEW table_with_sum AS 
 SELECT id, a, b, a + b as total FROM summedup;

然后您可以在视图中查询总和。

SELECT total FROM table_with_sum where id=5;

视图不存储每一行​​的总和,每次查询视图时都会计算total列。如果您的目标是提高查询效率,那将无济于事。

还有另一种方法:将列添加到表中,并创建用于更新的触发器,并插入该列,以在每次修改一行时更新total列。