Can(聚合)函数可用于定义列吗?

问题描述 投票:0回答:2

假设像这样的表:

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定义为其他两列的总和的能力?如果是这样:

  • 语法是什么?
  • 什么是这种类型的操作调用(聚合通常将单元格汇总到多行,而不是列。)
postgresql calculated-columns postgresql-9.6
2个回答
3
投票

您正在寻找的通常称为“计算列”。

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

但是对于这么简单的总和,我不打算存储冗余信息。

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


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;

View不存储每行的总和,每次查询View时都会计算totalcolumn。如果您的目标是提高查询效率,那么这无济于事。

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

© www.soinside.com 2019 - 2024. All rights reserved.