Могут ли (агрегатные) функции использоваться для определения столбца? - PullRequest
0 голосов
/ 15 апреля 2019

Предположим, что таблица такая:

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 ]

3 голосов
/ 15 апреля 2019

То, что вы ищете, обычно называется «вычисляемый столбец».

Postgres 9.6 не поддерживает это (Postgres 12 - будет выпущен в 4 квартале 2019 года - будет ).

Но за такую ​​простую сумму я бы не стал хранить избыточную информацию.

Если вы не хотите повторять выражение, создайте представление.

0 голосов
/ 15 апреля 2019

Я думаю, что вы хотите, чтобы представление.

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.строка изменена.

...