我使用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 (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吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。