gpt4 book ai didi

PostgreSQL 创建一个新列,其值以其他列为条件

转载 作者:行者123 更新时间:2023-11-29 11:19:03 25 4
gpt4 key购买 nike

我使用 PostgreSQL 9.1.2 并且我有一个如下所示的基本表,其中我将条目的生存状态作为 bool 值 (Survival) 以及天数 (生存(天))

我手动添加了一个名为 1-yr Survival 的新列,现在我想为表中的每个条目填写此列的值,条件是该条目的 SurvivalSurvival (Days) 列值。完成后,数据库表将如下所示:

Survival    Survival(Days)    1-yr Survival
---------- -------------- -------------
Dead 200 NO
Alive - YES
Dead 1200 YES

输入 1-yr Survival 条件值的伪代码如下:

ALTER TABLE mytable ADD COLUMN "1-yr Survival" text
for each row
if ("Survival" = Dead & "Survival(Days)" < 365) then Update "1-yr Survival" = NO
else Update "1-yr Survival" = YES
end

我相信这是一个基本操作,但是我找不到执行它的 postgresql 语法。一些搜索结果返回“添加触发器”,但我不确定这是我需要的。我认为我这里的情况要简单得多。任何帮助/建议将不胜感激。

最佳答案

一次性操作可以通过普通的UPDATE实现:

UPDATE tbl
SET one_year_survival = (survival OR survival_days >= 365);

我建议不要在您的名字中使用驼峰式大小写、空格和括号。虽然允许在双引号之间使用,但它通常会导致并发症和混淆。考虑章节 about identifiers and key words in the manual .

您知道吗,您可以使用 COPY 以 CSV 格式导出查询结果 ?
示例:

COPY (SELECT *, (survival OR survival_days >= 365) AS one_year_survival FROM tbl)
TO '/path/to/file.csv';

您不需要以这种方式开始的冗余列。


对评论的补充回答

为避免空更新:

UPDATE tbl
SET "Dead after 1-yr" = (dead AND my_survival_col < 365)
,"Dead after 2-yrs" = (dead AND my_survival_col < 730)
....
WHERE "Dead after 1-yr" IS DISTINCT FROM (dead AND my_survival_col < 365)
OR "Dead after 2-yrs" IS DISTINCT FROM (dead AND my_survival_col < 730)
...

就我个人而言,只有在有令人信服的理由时,我才会添加此类冗余列。通常我不会。如果是关于性能:你知道indexes on expressions and partial indexes吗? ?

关于PostgreSQL 创建一个新列,其值以其他列为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com