postgresql - Как реализовать / использовать представление в качестве вычисляемого столбца в таблице - PullRequest
0 голосов
/ 23 сентября 2018

мой предыдущий вопрос был помечен как уже отвеченный.Однако предложенное решение ( введите описание ссылки здесь ) помогло мне лишь немного.Я хочу знать, как мне получить представление о структуре моей таблицы или как использовать представление в качестве столбца.С помощью предложенного решения я создал следующее утверждение:

CREATE VIEW my_col4 AS
SELECT transaction.quantity * transaction.unit_price AS total_price 
FROM transaction

Следующим шагом было выполнение sql-statment: SELECT * FROM my_col4 Мой результат 130.00 €

, и этоправильный результат quantitiy(10) * unit_price(13.00)

Но я не знаю, как внедрить это в мою таблицу, соответственно, как должен выглядеть следующий sql-оператор, чтобы получить следующий результат:

|id  description  |  quantity  | unit_price  | total_price |
|1   Energy drink |  10        |     13.00   |    130.00   |

Я надеюсь, что мои мысли верны, и я с нетерпением жду вашего ответа.

Вот sql-утверждение моей (сокращенной) таблицы

CREATE TABLE public.transaction3
(
    id integer NOT NULL,
    description character varying(50) COLLATE pg_catalog."default" NOT NULL,
    quantity real NOT NULL,
    unit_price money NOT NULL,
    total_price money NOT NULL,
    CONSTRAINT transaction3_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.transaction3
    OWNER to postgres;

1 Ответ

0 голосов
/ 23 сентября 2018

Элементы после SELECT являются (скалярными) выражениями.Это могут быть простые имена столбцов или выражения, ссылающиеся на имена столбцов.Они также могут содержать функции, относящиеся к именам столбцов, или функции , а не , относящиеся к любому столбцу.(например, random() или now())


CREATE VIEW my_transaction AS
SELECT t.id , t.discription
        , t.quantity , t.unit_price
        , t.quantity * t.unit_price AS total_price
          -- nonsense below this line ...
        , upper(t.discription) AS "CAPITALS"
        , now() AS heute
        , (random()* 1000000)::integer AS lottery_number
FROM transaction t
    ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...