假设像这样的表:
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
定义为其他两列的总和的能力?如果是这样:
您正在寻找的通常称为“计算列”。
Postgres 9.6不支持(Postgres 12 - 将于2019年第四季度发布 - will)。
但是对于这么简单的总和,我不打算存储冗余信息。
如果您不想重复表达式,请创建一个视图。
我想你想要的是一个视图。
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时都会计算total
column。如果您的目标是提高查询效率,那么这无济于事。
还有另一种方法:将列添加到表中并创建更新和插入的触发器,以便在每次修改行时更新total
列。