我有一个大型数据库,我想做一些逻辑来更新新字段。
表harvard_assignees
的主键是id
LOGIC就像这样
id
if (state is NOT NULL && country is NULL), update country_out = "US" ELSE update country_out=country
我将第1步视为PostgreSQL查询,将第2步视为函数。只是试图找出使用确切语法本地实现的最简单方法。
====
第二个功能更有趣,需要(我相信)DISTINCT
:
答案 0 :(得分:1)
第一个:
UPDATE
harvard_assignees
SET
country_out = (CASE
WHEN (state is NOT NULL AND country is NULL) THEN 'US'
ELSE country
END);
首先它有条件“id = ...”但我删除了它,因为我相信你真的想要更新所有记录。
第二个:
UPDATE
example_table
SET
percent = (SELECT 1/cnt FROM (SELECT count(*) AS cnt FROM example_table AS x WHERE x.fn_key_1 = example_table.fn_key_1 AND x.fn_key_2 = example_table.fn_key_2) AS tmp WHERE cnt > 0)
那个人会有点慢。
我正在考虑基于窗口函数的解决方案,您可能也想探索它们。