PostgreSQL-如何实现/将视图用作表中的计算列

时间:2018-09-23 12:41:11

标签: postgresql

我之前的问题被标记为已经回答。但是,建议的解决方案(enter link description here)仅对我有所帮助。 我想知道如何将视图导入表结构或如何将视图用作列。在建议的解决方案的帮助下,我创建了以下语句:

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

下一步是执行sql语句: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 :(得分:2)

SELECT之后的项目实际上是(标量)表达式。这些可以是纯列名称,也可以是引用列名称的表达式。它们还可以包含引用列名称的函数,或者包含 not 引用任何列的函数。 (例如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
    ;