加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 18:06:51 所属栏目:百科 来源:网络整理
导读:我使用PostgreSQL 9.1.2并且我有一个基本表,如下所示,我将条目的生存状态作为布尔值(生存)以及天数(生存(天)). 我手动添加了一个名为1-yr Survival的新列,现在我想为表中的每个条目填写此列的值,条件是该条目的生存和生存(天)列值.一旦完成,数据库表将如下所
我使用PostgreSQL 9.1.2并且我有一个基本表,如下所示,我将条目的生存状态作为布尔值(生存)以及天数(生存(天)).

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

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

输入1年生存条件值的伪代码如下:

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吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读